Jueves 22 de febrero de 2018

Insertar caracteres unicode arbitrarios en XeTeX | 1

No, no me he olvidado de hablar de LyX luego de haber publicado el libro. De hecho hoy daré un rápido truco que el lector atento del libro podrá simplificar creando nuevas instrucciones. Como dice el título, el tema es insertar caracteres unicode arbitrarios en un documento XƎTEX editado desde LyX. Existen dos formas de […]
BlogDRAKE: Dianara 1.4.1 en el repositorio de BlogDrake
Asociación LiGNUx: Tutorial para instalar la versión de mantenimiento del Kernel Linux 4.15.5

Ubuntu recopilará tus datos

Vivimos en un mundo globalizado donde cada día priman más la información y lo datos sobre todo lo que consumimos, cómo lo consumimos y por qué lo hacemos. Toda esa información que las compañías quieren saber de nosotros nos aporta beneficios, pero ¿es realmente legal?, ¿nuestra privacidad está a salvo?.  Cuando pensamos en sistemas operativos basados en Linux o GNU, pensamos que estamos
Baltasar Ortega

Baltasar Ortega
KDE Blog

Lanzada la segunda actualización de Plasma 5.12 LTS

Como estaba previsto en el calendario de los desarrolladores, el pasado martes 20 de febrero la Comunidad KDE ha comunicado que ha sido lanzada la segunda actualización de Plasma 5.12 LTS. Una noticia que aunque es esperada y previsible es la demostración palpable del alto grado de implicación de la Comunidad en la mejora continua de este gran pedazo de Software Libre.

Lanzada la segunda actualización de Plasma 5.12 LTS

No existe Software creado por la humanidad que no contenga errores. Es un hecho incontestable y cuya única solución son las actualizaciones. Es por ello que en el ciclo de desarrollo del software creado por la Comunidad KDE se incluye siempre las fechas de las actualizaciones.

De esta forma, el martes 20 de febrero se lanzó la segunda actualización de Plasma 5.12, la cual solo trae (que no es poco) soluciones a los bugs encontrados en estas dos semanas de vida del escritorio y mejoras en las traducciones.

Es por tanto, una actualización 100% recomendable que todo el mundo con Plasma 5.12 se debería hacer.

Más información: KDE.org

Las novedades de Plasma 5.12 LTS

Muchas y variadas son las novedades que nos presenta Plasma 5.12, lo cual hace que sea una jugosa tentación aquellos que todavía no confían en el proyecto de la Comunidad KDE y una ilusionante vuelta de tuerca para aquellos que llevamos tiempo disfrutando de sus bondades.Lanzada la segunda actualización de Plasma 5.12 LTS

Una de las más importante, como no podía ser de otra forma en una LTS, es la mejora general del entorno, lo cual se materializa en mejoras de velocidad y en la optimización en el uso de la memoria. En otras palabras, cuando ejecutamos Plasma, ahora se usa menos CPU y menos memoria que en versiones previas. Por ejemplo, el tiempo que tarda en iniciarse un escritorio Plasma ha reducido drásticamente.

En cuanto a pequeñas mejoras tenemos:

  • Nueva funcionalidad “Color de noche” para reducir la exposición a la luz azul en las horas nocturnas.
  • Mejora de la usabilidad del menú global: al añadir una panel de menú global o un botón de decoración de ventana activa sin necesidad de ningún paso extra de configuración.Lanzada la segunda actualización de Plasma 5.12 LTS
  • Mejoras de accesibilidad en el KRunner: ahora se puede utilizar completamente con los lectores en pantalla, como Orca
  • La miniaplicación de iconos ahora usa el icono de web del sitio web
  • Vuelve a poderse seleccionar el texto de notificación, incluyendo una funcionalidad de copia de enlace
  • La disposición del menú de aplicaciones del Kickoff se ha simplificado.
  • La miniaplicación meteorológica ahora puede mostrar opcionalmente la temperatura junto al icono del estado del tiempo en el panel.
  • La actividad del sistema y el Controlador del sistema ahora muestran las gráficas para proceso del uso de la CPU.
  • El texto del widget Reloj ahora tiene un tamaño más adecuado.
  • Las sombras de las ventanas ahora están centradas horizontalmente y son más grandes
  • El diálogo de propiedades ahora muestra los metadatos del archivo.

Discover

Capítulo aparte merece Discover, el gestor de aplicaciones, temas, plasmoides y de cualquier cosa instalable de Plasma. Y es que son muchas las facetas que han mejorado y que lo convierten en un pieza básica del entorno Plasma.

Lanzada la segunda actualización de Plasma 5.12 LTS

Discover, pieza clave en el desarrollo del escritorio Plasma sigue mejorando.

De esta forma tenemos:

  • Mucha más estabilidad (quizás la más necesaria)
  • Mejoras en la implementación del Snap y el Flatpak (básica para la revolución que se está gestando para la instalación de aplicaciones)
  • Implementación de los URL apt: //
  • Las distribuciones pueden activar actualizaciones desconectado
  • Mejor usabilidad en factores de forma de teléfono: usa la acción principal del Kirigami, que tiene una vista específica para buscar
  • Integra las señales globales del PackageKit a las notificaciones
    • Actualización de distribución para los lanzamientos nuevos
    • Notificación de reinicio cuando el Discover instala o actualiza paquetes que requieren un reincio
  • Mejoras en la interfaz de usuario
    • Se han rediseñado las páginas de las aplicaciones para mostrar un software destacado.
    • Cabeceras más simples en secciones de no visualización
    • Vistas de navegación más compactas, con el fin de ver más aplicaciones de golpe
    • Las capturas de pantalla para aplicaciones son más grandes y tienen navegación por teclado
    • La lista de aplicaciones instaladas ordena alfabéticamente
    • IU más completa para configurar orígenes

Wayland avanza a pasos agigantados

Lo moderno se debe imponer poco a poco a lo obsoleto. Está claro que Wayland es el futuro y su integración en Plasma mejor en cada versión. De esta forma, por primera vez, se añade Wayland en el mantenimiento a largo plazo, así que se irán solucionando los errores en la series 5.12.x LTS.

Lanzada la segunda actualización de Plasma 5.12 LTS

Wayland y su ventana de configuración de pantallas. Cada día más cerca de reemplazar el veterano X.org

Para los más curiosos, estas son las nuevas funcionalidades de Wayland:

  • La resolución de la salida se puede definir desde el KScreen
  • Activación y Desactivación de las salidas desde el KScreen
  • Posibilidad de rotación de la pantalla
  • Rotación automática de pantalla a partir del sensor de orientación
  • Calibración automática de la pantalla táctil
  • Ya no se requiere más la implementación del XWayland; las aplicaciones que solo permitan las X todavía harán uso
  • Las ventanas del Wayland se pueden establecer a pantalla completa
  • Usa una política de planificación en tiempo real para mantener la fluidez de la entrada
  • Selección automática del Compositor en base a la plataforma usada
  • Comienza la implementación de las reglas de ventana
  • Color de noche para eliminar la luz azul de la pantalla en horario nocturno; esto es una sustitución solo por Wayland de la gran aplicación Redshift a las X

Wayland viene a Plasma y está a punto de ser el motor de visualización por defecto.

En resumen, un gran anuncio para una gran Comunidad que sigue apostando por el denostado escritorio y demostrando versión tras versión que Plasma es lo mejor que le puede pasar a tu ordenador.

¡KDE Rocks! ¡Larga vida a Plasma!

Miércoles 21 de febrero de 2018

Asociación LiGNUx: El visor de fotográficas Open Source PhotoQt acaba de liberar su versión 1.6
Baltasar Ortega

Baltasar Ortega
KDE Blog

Meetups de GNU/Linux Valencia, comparte libertad

Con la llegada de Akademy-es a Valencia este año, me he empezado a interesar qué se está cociendo en el mundo del Software Libre en la capital del Turia. Y, como es evidente, cada cosa que descubra la compartiré con vosotros. De esta forma me complace compartir con todos vosotros los Meetups de GNU/Linux Valencia que está organizando el gran divulgador del Software Libre Atareao.

Meetups de GNU/Linux Valencia, comparte libertad

Meetups de GNU/Linux Valencia, comparte libertadEl próximo 9 de marzo de este 2018 se va a realizar el primer encuentro organizado por Atareao (aka Lorenzo C) en el Meetup de GNU/Linux Valencia, un evento que en palabras de los organizadores tiene como objetivo:

[…] la difusión de GNU/Linux, para lo cual se pretende realizar reuniones mensuales, para realizar desde instalaciones de distribuciones GNU/Linuxen equipos portátiles o de sobremesa, resolver problemas en el uso diario, y dar a conocer la facilidad de uso y funcionamiento de esta distribución de GNU/Linux.

Dado el planteamiento del grupo, cualquiera puede unirse, desde usuarios noveles, sin apenas conocimientos informáticos, hasta usuarios avanzados, que pueden o bien ayudar a los recién llegados resolviendo sus dudas o problemáticas, o incluso el desarrollo de aplicaciones informáticas para la resolución de problemas cotidianos.”

Además, este primer encuentro será la piedra angular de este más que interesante proyecto y en él:

“[…] , haremos una breve presentación del grupo y posteriormente trataremos dos aspectos.

Por un lado hablaremos sobre el presente y futuro de Ubuntu como distribución. Que ventajas presenta Ubuntu frente a otras alternativas. Por que otras distribuciones como Linux Mint aparentemente le está ganando terreno.
Por otro lado, trataremos el tema de las Rolling Release frente a las Standard Release. Versiones e inconvenientes.”

La idea es que las reuniones se realicen el segundo viernes de cada mes, así que id marcando en vuestras agendas las fechas.

Si os interesa, los datos básicos del primer Meetup son los siguientes:

Más información: Meetup GNU/Linux Valencia

¿Qué es Meetup?

Meetup es una red social que tiene una diferencia básica respecto a otras redes sociales:promueve la formación de grupos en torno a intereses con el fin de que sus miembros se conozcan cara a cara.

Es decir, los usuarios establecen contacto a través de grupos digitales nuevos o ya creados, partiendo de intereses comunes como política, libros, juegos, películas, salud, mascotas, profesiones y muchos más, para después hacer un “meetup”, es decir, un encuentro presencial en algún lugar convenido, donde nunca faltan las charlas distendidas posteriores al evento

Martes 20 de febrero de 2018

Asociación LiGNUx: La suit ofimática en nube OnlyOffice publica la beta de su software de escritorio
BlogDRAKE: Problema de Seguridad en Mageia Identity
Lenin Hernandez

Lenin Hernandez
Leninmhs

Como enviar correos desde Perl usando Gmail

En esta entrada tendremos realizaremos el envió de correo desde el SMTP de Gmail usando el lenguaje de programación Perl para realizar esta tarea, específicamente usando el modulo Email::Sender. Perl es un lenguaje muy común para escribir scripts, por lo cual, es muy útil poder enviar de correos electrónico desde el. En Perl existen varias … Sigue leyendo Como enviar correos desde Perl usando Gmail
Baltasar Ortega

Baltasar Ortega
KDE Blog

La Comunidad KDE recibe 200000$ de donación

Ha sido la noticia de este lunes: la Comunidad KDE recibe 200000$ de donación. Y de esta forma se une a la lista de otras fundaciones como la Free Software Foundation que han recibido una donación de este tipo por parte de la Fundación Pineapple.

La Comunidad KDE recibe 200000$ de donación

La Comunidad KDE recibe 200000$Antes de empezar el artículo, debo reconocer que en esta ocasión voy a aprovecharme del trabajo realizado por Victorhck en su gran blog y a emplear parte del texto que él ha traducido.

Ayer lunes 19 de febrero de 2018 la fundación KDE e.V ha anunciado que ha recibido una donación de 200.000 dólares por parte de la Fundación Pineapple

En el comunicado oficial la Fundación Pineapple reconoce que la Comunidad KDE crea software del que se beneficia el público en general, hace avanzar el uso del software libre en toda clase de plataformas y protege la privacidad de los usuarios ofreciendo herramientas sencillas y de primera clase en las manos de las personas con un coste cero para ellas.

Por otra parte Lydia Pinscher la presidenta de KDE e.V ha declarado que con esta donación KDE está inmensamente agradecida y expresa su más profunda gratitud a la fundación Pineapple por su generosidad.

En cuanto al destino de la donación Lydia ha adelantado que se utilizarán para extender los objetivos que se ha marcado la comunidad KDE en hacer el software libre accesible a todas las personas y en todas las plataformas. En otras palabras, el dinero ayudará a conseguir la visión de KDE de crear un mundo en el que todas las personas tengan el control sobre su vida digital y disfrute de la libertad y privacidad.

Esta es una gran noticia para el software libre en genral, ya que estas importantes donaciones, pueden ser un catalizador para que otras fundaciones sigan el ejemplo o para que las instituciones públicas se den cuenta del incalculable valor del trabajo que está realizando la Comunidad KDE en particular y el Software Libre en general.

Más información: KDE News

 

Lunes 19 de febrero de 2018

Emiliano A. González Salgado

Emiliano A. González Salgado
El blog de Emi

BITDEFENDER ANTIVIRUS SCANNER EN FEDORA 27

BitDefender Antivirus Scanner for Unices, un antivirus de BitDefender y que se puede utilizar gratuitamente.

La página de descarga es:

https://www.bitdefender.es/business/antivirus-for-unices.html

Después deberemos solicitar una licencia gratuita por un año, esta parte si que está visible desde el enlace Solicite licencia gratuita, que nos mandará una clave a nuestro email.

Una vez descargado, simplemente ejecutamos (sin olvidarnos de hacerlo ejecutable), como root:

sh BitDefender-Antivirus-Scanner-7.7-1-linux-amd64.rpm.run

Seguimos las instrucciones de la terminal, incluyendo escribir la palabra accept e indicando que queremos instalar también la interfaz gráfica.

El software ha sido discontinuado desde principios de 2016. Esta versión 7.7.1, data de noviembre de 2014, que en software antivirus es un mundo, las firmas siguen actualizándose diariamente, esencialmente son las mismas que usan otros productos de BitDefender, así que ningún problema.

Como habéis podido ver, además tiene versión nativa de 64 bits, que es de las cosas que más me gustan en BitDefender.

Si te has registrado con anterioridad y tienes licencia, puedes descargarlo directamente de:
https://download.bitdefender.com/SMB/Workstation_Security_and_Management/BitDefender_Antivirus_Scanner_for_Unices/Unix/Current/EN_FR_BR_RO/Linux/

Para evitar errores y que se carguen los motores antivirus, una vez instalado hay que ejecutar estos dos comandos, como root:

ln –force –symbolic /opt/BitDefender-scanner/var/lib/scan/Plugins /opt/BitDefender-scanner/var/lib/scan/Plugins/plugins
(todo lo anterior en la misma linea, pues es un único comando)

ll /opt/BitDefender-scanner/var/lib/scan/Plugins/plugins

Con ello ya se puede arrancar el programa, proceder al cambio de licencia (la consta es la de evaluación), actualizar las firmas y comenzar el escaneo.

Domingo 18 de febrero de 2018

Lenguajes de programación que todo buen programador debe conocer

Dice Bjarne Stroustrup (creador de C++) que nadie debería llamarse un profesional si no conoce al menos 5 lenguajes suficientemente diferentes entre sí. Comparto con él esa afirmación, así que he decidido hacer una lista con esos 5 lenguajes suficientemente diferentes entre sí. La razón de que sean diferentes entre sí es que implementan paradigmas distintos.

Paradigmas de programación

Cada lenguaje está moldeado en base a uno o varios paradigmas de programación. Aunque no hay una teoría con la que todos los autores esten de acuerdo, bajo mi punto de vista existen dos grandes grupos de paradigmas de programación. Imperativos y Declarativos. Los imperativos responden a la pregunta de ¿Cómo se calcula esto? y los declarativos ¿Cuál es el resultado de esto?. Otra manera de verlo es ver al paradigma imperativo como un intento de simplificar la electrónica subyacente. El paradigma declarativo por contra muchas veces se origina de la teoría matemática y posteriormente se aplica al ordenador.

Cada uno de estos paradigmas a su vez tienen más sub-paradigmas y luego existen paradigmas transversales, es decir, que se pueden aplicar (o no) tanto en lenguajes imperativos como en lenguajes declarativos.

Un buen programador necesita conocer estos paradigmas.

Prolog

Prolog es un claro ejemplo de programación lógica. Se trata de un lenguaje declarativo. Diseñado en los años 70 en Francia, Prolog tuvo mucha popularidad en el desarrollo de Inteligencia Artificial debido a sus características lógicas. En esencia, Prolog se basa en la demostración de predicados, similares a los del álgebra de predicados.

Ejemplos de lógica de predicados

Un programa Prolog es en realidad un conjunto de afirmaciones o predicados. En tiempo de ejecución se realizan preguntas sobre predicados. Prolog intenta entonces demostrar la veracidad del predicado, para ello usa el mecanismo de backtracing. Una característica muy interesante de Prolog es el pattern matching, que básicamente permite preguntar para qué valor de una variable se cumple un predicado. Esto permite realizar cosas muy interesantes:

% PROGRAMA EN PROLOG
% PREDICADOS QUE SON VERDADEROS

hijo(bernardo,sonia).
hijo(veronica,sonia).
hijo(bernardo,luis).
hijo(veronica,luis).

varon(bernardo).
varon(luis).
mujer(veronica).
mujer(sonia).

% REGLAS

madre(X,Y) :- hijo(X,Y), mujer(X).

Ahora, para saber quién es la madre de Sonia intentamos demostrar:

?- madre(X,sonia).

Y responderá X = veronica.

En predicados sin variables, Prolog solo devuelve true o false.

Existen varios compiladores/intérpretes de Prolog, siendo el más conocido SWI-Prolog, multiplataforma y con una extensa librería que incluye GUI multiplataforma y framework web. También existe GNU Prolog y Visual Prolog (antiguamente conocido como Turbo Prolog), aunque este último no se le considera Prolog auténtico por ser demasiado diferente al resto.

Haskell

Haskell es un lenguaje declarativo que implementa el paradigma funcional. Es uno de los pocos lenguajes funcionales que son 100% puros. Se entiende por puros como la capacidad de no generar efectos colaterales. Haskell es un lenguaje fuertemente tipado y deriva de la teoría de categorías. Haskell ha sido objeto (hasta cierto punto merecido) de muchas bromas sobre este asunto, ya que para la mayoría de programadores, conocer teoría de categorías no es demasiado práctico.

Otra característica de Haskell es que es perezoso, lo que significa que no calculará nada que no sea estrictamente necesario (esto puede parecer muy raro hasta que lo entiendes en la práctica).

module Main where

import Data.Matrix
import qualified Data.Vector as Vector
import qualified Reader
import qualified Data.Maybe as Maybe

main :: IO ()
main = do
    matrix <- Reader.readFile "gosperglidergun.txt"
    putStrLn "Iterar cuantas veces?"
    n <- getLine
    let times = read n :: Int
    let finalMatrix = Prelude.iterate Main.iterate matrix
    putStrLn $ prettyMatrix $ finalMatrix !! times


iterate :: Matrix Int -> Matrix Int
iterate m = 
    if hasToGrow then
        matrix (nrows m +2) (ncols m +2) (\(i,j) -> builder (i-1,j-1))
    else
        matrix (nrows m) (ncols m) builder
    where
        builder (i,j) = 
            if get (i,j) == 0 then
                if hasToBorn (i,j) then
                    1
                else
                    0
            else
                if hasToDie (i,j) then
                    0
                else
                    1
        hasToGrow = 
            Vector.sum (getCol (ncols m) m) > 0 || 
            Vector.sum (getRow (nrows m) m) > 0 ||
            Vector.sum (getCol 1 m) > 0 ||
            Vector.sum (getRow 1 m) > 0
        get (i,j) = Maybe.fromMaybe 0 (safeGet i j m)
        hasToBorn (i,j) = sumNeighbors (i,j) == 3
        hasToDie (i,j) = sumNeighbors (i,j) /= 2 && sumNeighbors (i,j) /= 3
        sumNeighbors (i,j) = 
            get (i-1,j-1) + get (i,j-1) + get (i+1,j-1) 
            + get (i-1,j) + get (i+1,j)
            + get (i-1,j+1) + get (i,j+1) + get (i+1,j+1)

Este código pertenece al juego de la vida de Conway que (también) implementé en Haskell, simplemente por curiosidad, ya que no está optimizado. Faltaría el módulo Reader, así que no intentéis compilarlo directamente.

Haskell como tal no tiene variables ni bucles y sus condicionales no son exactamente iguales a los de los lenguajes imperativos (aunque se use if, en el caso de Haskell son bloques que siempre deben devolver un valor).

Aunque siempre ha sido un lenguaje académico (nació en 1994, un año antes que Java), ahora ha alcanzado bastante popularidad y algunas empresas como Facebook lo usan en producción.

El compilador más conocido, capaz de generar código nativo, es GHC. Este dispone de un REPL llamado GHCi y también compila a JavaScript y se está trabajando en WebAssembly. Otro intérprete es Hugs, pero solo es compatible con Haskell98.

La forma recomendada de instalar GHC es con Stack. Usa Stack y ahórrate quebraderos de cabeza.

Otros lenguajes similares a Haskell son ElmPureScriptEta e Idris. Este último compila a JavaScript y pone énfasis en su librería, que es capaz de competir con Angular y React.

Racket (Lisp)

Lisp no puede faltar nunca. Se trata de uno de los primeros lenguajes de programación y sigue siendo tan actual como el primer día, gracias a su simple pero efectivo diseño, inspirado en el cálculo lambda de Alonzo Church. No obstante, Lisp ha evolucionado mucho, si me preguntan que dialecto/lenguaje de Lisp merece la pena aprender ahora diría Racket. Racket es un lenguaje de programación funcional y programación orientada a objetos. Racket no es 100% puro como Haskell (la mayoría de dialectos de Lisp no lo son) pero sigue siendo muy interesante. También, tiene tipado débil en contraposición al tipado fuerte de Haskell.

Racket desciende a su vez de Scheme, que es una de los ramas principales de Lisp, siendo la otra Common Lisp. ¿Por qué estas diferencias? La gente de Scheme prefiere un lenguaje elegante, lo más funcional posible mientras que la gente de Common Lisp prefirieron sacrificar eso a cambio de un lenguaje más práctico en el mundo real.

Racket cuenta con una extensísima librería estándar capaz de realizar todo lo que te imagines sin gran problema. Racket también soporta las famosas y potentes macros.

#lang racket

(require 2htdp/image) ; draw a picture
(let sierpinski ([n 8])
  (cond
    [(zero? n) (triangle 2 'solid 'red)]
    [else (define t (sierpinski (- n 1)))
          (freeze (above t (beside t t)))]))

Triángulo de Sierpinski en el IDE DrRacket.

JavaScript

JavaScript está en todas partes. Es uno de los lenguajes con mayor aplicación práctica. Web, servidor, bases de datos, scripting, plugins e incluso IoT. Por eso JavaScript me parece un lenguaje que deba estar en esta lista. Y sin embargo no es fácil categorizarlo correctamente. Ante todo, estamos ante un lenguaje de programación imperativo, con orientación a objetos y buen soporte a la orientación a eventos.

Y antes de que se me venga alguien a comerme, sí, JavaScript está orientado a objetos, aunque no siguen el patrón de clase/herencia que C++ y Java tienen tan acostumbrados a la gente. La orientación a objetos por prototipos no la inventó JavaScript, sino que ya estaba en otros lenguajes como Self y más actualmente Io. Y realmente lenguajes como Python o Ruby no se alejan mucho de esto internamente.

Actualmente, con la versión ES7, tenemos muchas cosas interesantes en programación asíncrona y clases al estilo Java que no son más que azúcar sintáctico sobre el verdadero modelo de JS.

Definitivamente, JavaScript es un lenguaje muy interesante y aunque a algunas personas les pueda parecer un caos, ciertamente es muy productivo y útil. Aprovechar al máximo JavaScript requiere pensar de forma distinta a como lo harías en otros lenguajes imperativos.

async function lastGist(username){
    let f = await fetch(`https://api.github.com/users/${username}/gists`);
    let data = await f.json();
    try{
        return data[0].description;
    }catch(e){
        return undefined;
    }
}

let users = ["aarroyoc","DanielBV","hecsaen"];
Promise.all(users.map(lastGist)).then((gists)=>{
    gists.forEach((gist)=>{
        console.log(`Last gist: ${gist}`);
    });
});

C# (o Java)

C# es otro lenguaje bastante complejo, imperativo, orientado a objetos por clases, con partes de programación funcional y programación asíncrona. Pero el sistema de la orientación a objetos aquí es distinto. Aunque Alan Kay, creador de Smalltalk y casi casi de la orientación a objetos, opine que el estilo de C++ y de Java son putas mierdas, lo cierto es que es lo más usado actualmente. Herencia, clases, interfaces, etc

Personalmente prefiero C#, ya que como lenguaje es más potente que Java, pero ambos al final tienen bastantes características comunes entre sí.

using System;

class MainClass {
  public static void Main (string[] args) {
    var names = new List<String>
    {
        "Ana",
        "Felipe",
        "Emilia"
    };

    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name}");
    }
  }
}

Para C# el compilador más usado es Roslyn, actualmente disponible en .NET Framework, .NET Core y Mono.

Otros lenguajes parecidos son Java o si preferimos una sintaxis tipo Pascal: Delphi/Object-Pascal tiene conceptos muy similares.

Conclusión

Con esto ya tendríamos 5 lenguajes suficientemente diferentes. Ahora bien, nos hemos dejado lenguajes muy interesantes, tanto desde el punto de vista práctico como teórico. No puedo dejar de mencionar a Smalltalk por su implementación de los objetos, a C por su ligera capa de abstracción sobre ensamblador, al propio Ensamblador porque es lo que ejecuta la CPU realmente, a Python por su diseño así como su gran uso en ciencia de datos y scripts o a Rust, un lenguaje imperativo con sistema de traits, semántica de movimiento, pattern matching.

Merece también la pena mirar FORTH, SQL (quizá el lenguaje declarativo más usado del mundo) y lenguajes que se adapten bien a la programación reactiva (hay sobre todo librerías, aunque algún lenguaje como Simulink lo implementa). Mathemathica implementa también el paradigma de programación simbólica, muy poco explotado en otros lenguajes.

Estos han sido mis 5 lenguajes, ¿cuáles serían los tuyos?

La entrada Lenguajes de programación que todo buen programador debe conocer aparece primero en Blog - Adrianistan.eu.

Viernes 16 de febrero de 2018

Review “Magento” plataforma para tiendas online.

¿Qué es Magento? Magento es una plataforma de comercio electrónico escrita en PHP. Es de código abierto, esto significa que tienen una version gratuita. Usa MySQL, MariaDB y Zend Framework. Tiene dos versiones: Magento Open Source: Cualquiera puede modificar el núcleo del sistema. Los desarrolladores pueden implementar los archivos del núcleo. Esto nos permite aprovecharnos de su marketplace […]

La entrada Review “Magento” plataforma para tiendas online. aparece primero en Blog de Informática ✏ Luisi.

Jueves 15 de febrero de 2018

Por algo se empieza: un primer borrador de la portada de DaE, ed. 2018

Y bueno, la portada del libro sobre LYX me ha quedado tan bien que ciertamente tenía que seguir con la misma línea de… ¿humor? Ya juzgarás, lector. Eso sí, no solo está sujeta a mejoras y cambios (¡bienvenidas las sugerencias!): por el momento es lo único que he hecho sobre el tema por lo que […]

Miércoles 14 de febrero de 2018

Disfruta Netflix a 1080p en Linux

Hace apenas unos años era impensable que apareciese una plataforma de pago por servicios de streaming de video y que pudiera ser exitosa. Pero Netflix es a día de hoy sin duda un referente en el sector de video por internet, con los años se ha ido ganando el pulso a conciencia con títulos de su propia cosecha y gracias al aumento de su catálogo de forma considerable. Este servicio nos

Martes 13 de febrero de 2018

Ramón Miranda

Ramón Miranda
Ramon Miranda

Round 2. Visual Experiment for Krita 4.0 new layout proposal

Round2.

Virtual Deleted (for now) 44 brushes,  88 left.

virtual deleted bruhes.

How i decide what to remove? well i have tried to get the more visual pleasant and useful combination. My focus is what people could expect the first time krita opens. and make the experience as much comfortable as possible. No knowledge of tools or brushes are needed.
So if you like the idea here we go.

This is a document with lot of info, not for begginers even when they can learn some tips here and there, but lot of terminology is present.

You are going to see lot of “IMO”( in my opinion). Of course you can disagree totally or not. I expose my ideas based on my own experience and i hope this help, if you like flames i am not you man ;)
Also you will need this image to follow the numbers.
  • 1 it can be changed by eraser soft. They do basically the same, erase softly. the Airbrush erase don´t use the Airbrush feature. Also imo is not a good idea put an eraser as the first brush in the default pack.If you(begginer) try it in a blank layer you can see nothing is happening and think the software is bad or the tool is not working.
  • 3 The “noise” size controlled by density can’t be modified In big canvas sizes. This could be make the noisy effect invisible or not perceptible.
  • 4 Airbrush pressure is a redundant term. It would be like the tipical Airbrush. Added 2 instead, Airbrush linear i would remove linear.
  • 7 we have a lot of “wetpaint” colorsmudge brushengine based brushes. 
  • 9 Gaussian term is not a common word to describe behavior in brushes. It is slow and Soft curve can do the same and more imo.
  • 12 The Soft thing is not enough for me to be as brush.
  • 14 Added 20 instead. If the tablet has no tilt options, we can use RMB to change angle.
  • 22,26, 27 Added 24 instead.I wish to control the size of bristles and the scale of them. nowadays they are always 1px width wich is nice for low res but is useless for highres images. 6000px wide.
  • 38, 39, 40 i can’t see practical uses. Maybe sketching. Added 37 to have a sample of this brushengine. I would add to the “specials” category
  • 44 added 45 instead in “ink” category. It is only to fill big areas, it could be replaced by 86 or 87. The tip can be changed to be square to be more usable in squared surfaces just changing the brush tip to square.
  • 46 Slow and nowadays we have another Blender Blur wich is soft. If DOF is what we need i would put it in FX or Distort Category
  • 51 There is a newer version for krita4. WIP
  • 55, 56, 57 Added 53, 54 instead in Texture category
  • 60 It can be replaced by 63. The ink stroke
  • 62, 64 Very small imo. Added 63 instead
  • 65 added 68 instead.
  • 69, 70, 71,72 i consider them as basic brushes. 69 or 71 can be replaced for 20. 70 can be replaced by basic brush with opacity by pressure. 72 can be replaced by ink brush just to take notes. 
  • 77 added 78 instead . Is texture controlled by pattern in Basic category
  • 94 Added 93 instead. We can control opacity by the upper menu slider or RMB. it would be great to have opacity by pressure or gradient as original Alchemy software.
  • 97,98,99,100,101,102,103,104,105. added 95, 96 as representation of the Sketchbrushengine. Shows basic features. Too much variation of the same brush engine (11 brushes). The pencil icon is not very intuitive. Size doesn’t control real size but Area to be affected and this is not usual behavior but special behavior in sketch brushengine. This can confuse some users.
  • 115 Useless imo. Only show change on color dynamics.The sorrounder brushes are very different. And the icon is related to dry technique like pastel so this could be confusing. 
  • 117 Added 120 (Blending cat. “Particle” Effect that blends color.)
  • 123 Added 118, 121 instead
  • 129 It is not related with nature neither texture. Random in rotation makes very hard to predict results. And useless imo.


That's all for the Round 2. Could i remove more brushes? could i simplify a bit more but without loosing quality and options for the user? maybe in Round 3 . Sharing and comments are apreciated as always. more feedback means better software

Ramón Miranda

Ramón Miranda
Ramon Miranda

Round 1. Visual Experiment for Krita 4.0 new layout proposal



The Krita team is working hard to release Krita 4.0 on March. We as users try to help in some ways not always coding but creating resources and giving feedback and ideas.So, maybe this post could be interesting for you as krita user. here we go. consider this like a live post, where i am going to publish my ideas on this subject. My ideas to organize the krita brush set a bit more

I have been thinking about how to get the best of what we already have in krita. It sounds a bit crazy but take it as it is. **An experimental place for experimentation.** As we are making new things with brushes maybe is a good time for this kind of thing.
Sometimes is complicated due emotional attachments to the brushes. But for this experiment imagine everything is possible and nothing is solid like a rock

I often find myself searching for the right presets and then I have to search by word or visually. That is not a big issue. It takes me little time but I feel is not the best way to do that.

I have thought what other users might be using, so i take in consideration some facts:
  • What  Videos, tutorials,  screen capture, photos, are showing about layout and preferences
  • There is not a perfect solution. Even when is the best solution people can disagree due they are used to previous solution or personal taste.
  • krita covers a widest range of users. From beginners to pro users.
  • Pro or advanced users often use customized tools
This is my proposal to have the krita set more organized. To do it** I have printed several copies,numbered and wrote brushes name and cut all the brushes separately.
This makes the set more mobile because I can move brushes freely without worring about the names. (Then we have to being able to translate all these changes to the real application. Also this way I have a **overall view** on what we have on the table. After lot of game "moving" the brushes i think in them this way

I go from simple brushes , using only opacity and basic spacing to more complicated "organic" feeling . From simple to complex, order to chaos. 
After a bit more of thinking i ended with this idea as a guideline in each category :
 First we have the "Basic" behavior, then we have a more  Textured Brushtroke, then we have the brushes that are controlled with Pattern, and finally we have  Special Brushengines (Hairy, Hatch...)
(I think this helps also the user to guess where to look for a textured brush for example.)


Let's put a name on them
**Is hard to find good names, even harder ordering them alphabetically, but here we go. Who knows, maybe you will like it.**
 Basic (10 basic brushes to cover a wide range of painting without knowing the program) **covers painting both hard and soft,texture by brush tip and pattern,erasing and basic blend.**
These are my basic for a begginer. If you post in a wheel you get something like this.

Blenders
Draw (pencil and shading)
Erasers
Ink
Modify color (blending modes)
Painting
Paintwet(colorsmudge)
Smudgers (if we don't want to use the blender word and here has more sense because they are wet too.
Texture brush (brushes with more organic feel. Simmulates texture by the brush tip. Low spacing)
Texture rough (textures with big sizes and big spacing. Also controlled by patterns)
Specials(other brushengines) they are almost at the end because they have unusual behavior or special features. Pixelart could be here.
ZYX  tangent normal (3d. as this is different from illustrative painting I would keep them at the end of the set.
Quick brushes(I don't know if we are going to keep this brushes )

I have tried to keep the set organized and i have deleted more than 40 brushes, and i find the set visually easier to understand. 
If you have suggestions or new ideas just share them on the comments. Thanks 

I have a list with all the brushes that i have removed and why. are you interested or do i finish this experiment?

More info about brushes soon. you can take a look into the krita brushes core place here at phabricator. https://phabricator.kde.org/T7424



Lunes 12 de febrero de 2018

Gorka Urrutia

Gorka Urrutia
Nideaderedes

Taller online gratuito de Python

¿Quieres empezar con Python y no sabes por dónde empezar? Pues apúntate a mi taller gratuito de introducción a Python para perderle miedo.

Funcionará a modo de videoconferencia y durará aproximadamente una hora. Nos veremos las caras todos los participantes y podrás preguntar dudas sobre la marcha. Los grupos serán de máximo de cinco personas.

Las fechas aún están por decidir, pero si te interesa apúntate cuanto antes que las plazas son limitadas.

Sábado 10 de febrero de 2018

非常勤の手当ヒューマンがいる抜毛サ

日雇いの処理人がいる抜け毛サロンがあるという不安に思って設問ホームページに書き込みやるユーザーもいます。
抜け毛サロン次第ですがバイトが存在するのが普通です。
正社員以外の形態で動く係を抱える抜け毛サロンもある一方、うちはみなさん正社員のみとうたうサロンもあるようです。
も、働き手でないからといってレベルが低いについてには繋がりません。
抜け毛を希望する女性の中には、カラダ抜け毛をした方がいいのかなって考え込むユーザーも少なくありません。
また、気になるエリアのムダ毛だけを脱毛すればよいのではないかと位置付ける方もいるでしょう。
も、一部の抜け毛をすると他のエリアの毛髪が目立って気になります。
そのため、初めからカラダ抜け毛を行なうほうが有効でお得だと考えられます。
どんなりゆうか、複数の抜け毛サロンによる、よく言う「はしご」を通してはいけないと思えそぐうですが、はしごをするため良いことがたくさんあります。
初回限定の援助を利用すれば、それ程あまたのサロンによることになるので、それぞれのサロンでの抜け毛が体験できます。
それぞれの抜け毛サロンの対応振る舞いや、作業場のクラスなども自分の目で分かるので、支払いもわずかのに処理は貰えるし、いいところがあれば続けられるといったあれば正邪、積極的にはしごをください。
抜け毛エステティックサロンは誰もが聞いた趣旨のあるような、良く知られている著名様の方が切歯扼腕を感じることが安いようです。
小・中規模のおみせについては、処理を行なうエステティシャンのワザ才能そのものがそれほど良いとは思えなかったり、知人に関する言葉遣いや振る舞いなどが目線に余る感じだったりすることもあるので要注意です。
反面、大手のおみせでは係の手ほどきがシステム化され十分に行き届いているものですし、何か支障が起こったときの応対の行いなどもちゃんとした信頼できるカタチでしょう。
抜け毛サロンで評価なのが明かり抜け毛法だ。
また、近頃は家庭用抜け毛器などでも、こういう明かり抜け毛機構がついた抜け毛器が買えるのです。
毛髪には毛髪テンポがある結果、一括のお試しでは全然抜け毛の効果は感じられません。
休み休みで6回傍ら何度も脱毛するため大きな効果を実感できるのです。
ムダ毛の製造を自分でおこなわないと決めた時に、選ぶのはサロンか病舎か戸惑ってしまうユーザーも要る事でしょう。
抜け毛サロンと抜け毛病舎では、その方法に決定的な違いがあるのです。
レーザー抜け毛は抜け毛病舎でおこなわれるのに対して、一般的な抜け毛サロンでは明かり抜け毛という手立てだ。
レーザー抜け毛のように凄い光をあてて脱毛する手立ては、医者(欠損気味だといわれて久しいですね。
選択のすきもないような領域も少なくありません)ライセンスを持つ人以外は施術することができません。
抜け毛サロンやエステティックサロンでなじまれている明かり抜け毛は妊娠してあるほうが受けても危険なことはないのでしょうか?普通は、妊娠センターは明かり抜け毛を受けるのは不能とされています。
妊娠センターはホルモンのバランスが崩れているため、肌荒れ(鋭敏スキンや乾燥肌、くすみやたるみ、くまなど、様々な肌荒れがあります)が起こり易く変わる別、抜け毛効果が満足に得ることができないことがあるためです。
多くの抜け毛サロンでは、抜け毛のエリアによりことなる価格が設定されているものです高額に患うクラスもある結果、多くのサロンで貸出が可能になっています。
サロンによっては、ごと支払いという候補もあるようです。
クラス額面で出金をしてしまうと、途中で利用しなくなったら残りの分のお金を返して貰うツボつづきはややこしいカタチなので、予定の一変がありそぐうならごと支払いのサロンをオススメします。
脇クリームのおすすめは?|ランキング

Jueves 08 de febrero de 2018

El lector de noticias QuiteRSS

Por motivos que quedarán claros a la brevedad, actualizar a openSUSE 42.3 significó para mi entre otras cosas la triste decisión de abandonar Akregator. Akregator siempre resultó un tanto «limitado», lo sé, y presentaba algunas «dificultades» (a.k.a bugs) con el icono de la bandeja del sistema que hacían que a veces no resultara fácil el […]

Miércoles 07 de febrero de 2018

Review “Recuva” programa de recuperación de archivos

Después de analizar muchos otros programas para recuperar los archivos que borramos por accidente. He decidido darle una pincelada más a esta herramienta: Recuva. Ya que me parece la más interesante y así podremos analizar los pros y contras, no solo de la version gratuita que es la que más personas usan habitualmente para recuperar […]

La entrada Review “Recuva” programa de recuperación de archivos aparece primero en Blog de Informática ✏ Luisi.

Linux se logra ejecutar dentro de una Nintendo Switch

Cuando hablamos de video consolas, la mayoría nunca se imagina que funcionan con un sistema operativo detrás, pero si, las nuevas generaciones desde que saliera la gran Dreamcast han venido con un sistema operativo dentro para poder ofrecernos muchas más prestaciones aparte de jugar, poder hacerlo en red o simplemente dotarlos de más potencia. Esto es un arma de doble filo, ya que como

Jueves 01 de febrero de 2018

Curso: Gestión de proyectos Software con Git y GitHub

Independiente si te mueves por el mundo del desarrollo, la administración de servidores o simplemente eres una mente inquieta en...

La entrada Curso: Gestión de proyectos Software con Git y GitHub aparece primero en Nosinmiubuntu | Ubuntu en concreto, GNU/Linux en general.

Gorka Urrutia

Gorka Urrutia
Nideaderedes

Taller online de refactorización en PHP

En los próximos días voy a organizar talleres online en los que refactorizaremos código PHP. Aprenderemos cómo convertir una chapuza de código espaguetti en código de calidad yendo a través de pequeñas mejoras. En el taller usaremos buenas prácticas, programación orientada a objetos, interfaces, composición, phpunit, git, etc.

Será divertido y podrás aprender un montón. Requisitos imprescindibles: participación activa, conocimientos de PHP y saber algo de programación orientada a objetos.

PHP Sensei - Nueva sección de trucos sobre PHP

Miércoles 31 de enero de 2018

Curso: Desarrollo en HTML5, CSS y Javascript de Apps Web, Android e IOS (8ª edición)

Retomamos las publicaciones en la web para hablaros de la próxima edición del curso gratuito Desarrollo en HTML5, CSS y...

La entrada Curso: Desarrollo en HTML5, CSS y Javascript de Apps Web, Android e IOS (8ª edición) aparece primero en Nosinmiubuntu | Ubuntu en concreto, GNU/Linux en general.

Martes 30 de enero de 2018

Tutorial de introducción a Godot 3.0. Juego de Snake en C#

Llegó el día. Godot 3.0 salió a la luz. Se trata de una versión con muchas mejoras respecto a Godot 2.x. Se trata de un motor de videojuegos software libre, compatible con la mayoría de sistemas operativos (y consolas a través de una compañía privada). Aprovechando la ocasión voy a explicar como hacer un juego simple, usando C# y el motor 2D de Godot. Este tutorial sirve para familiarizarse con el motor.

Instalando Godot

Lo primero que tenemos que hacer es instalar Godot. Para ello vamos a la página de descarga y descargamos la versión que corresponda a nuestro sistema con Mono.

Es requisito indispensable tener instalado Mono SDK, tanto en Linux como en Windows. El Mono SDK se descarga desde http://www.mono-project.com/download/.

Una vez descargado tendremos un fichero con tres archivos. Descomprímelos en una carpeta. Ahora simplemente puedes ejecutar el fichero ejecutable.

Ventana de proyectos

Nada más arrancar tendremos una ventana de proyectos. Desde ahí podemos abrir proyectos que hayamos creado, descargar demos y plantillas o simplemente crear un proyecto nuevo.

Si le damos a Proyecto nuevo procederemos a la creación de un nuevo proyecto (¡¿qué complicado, verdad?!).

Una vez hecho esto ya estaríamos en el editor propiamente dicho.

Editor

Rápidamente cambiamos al modo 2D y hacemos zoom hacia atrás. Vamos a ajustar la pantalla. Para ello vamos a Proyecto->Ajustes de proyecto. Buscamos el apartado Display->Window y ajustamos la resolución base. Esta será la que usaremos para poner los elementos en pantalla. Después vamos a Stretch y configuramos el modo 2D y mantener el aspect ratio.

Esta configuración sirve para empezar con juegos simples en 2D puedan escalar fácilmente a distintas pantallas sin tener problemas de descuadres.

Ahora hacemos click en el más (+) para añadir un nodo a la escena.

Para nuestro juego, voy a añadir un Node2D, que hereda de CanvasItem y tiene APIs para dibujar rectángulos y círculos..

No lo tocamos y hacemos click derecho en el Nodo. Damos click a Attach Script:

Es importante tener un nombre de script distinto a Node2D. Esto puede dar problemas. Una vez hecho esto, se nos mostrará esta pantalla, que nos permite escribir el código en C#. A partir de ahora voy a usar Visual Studio Code, porque lo considero mejor para escribir código en C# que el editor de Godot. Creamos también dos Sprite hijos del Node2D. Apple y SnakeBody van a llamarse y les creamos scripts de C# también.

Dibujar en pantalla

Abrimos con el VS Code el fichero .cs que hemos creado, en mi caso, Snake.cs.

Dentro veremos una clase con dos funciones, _Ready y _Process. Estas son solo un ejemplo de las funciones que podemos sobreescribir en las clases asociadas a nodos. Otras funciones serían: _Draw, _Input. ¿Cuándo tenemos que usar cada una? Ready es una especie de constructor, ahí inicializamos todo lo que haga falta. Process es llamada constantemente, ahí hacemos las actualizaciones y comprobaciones pertinentes. Draw permite dibujar (si no trabajamos con imágenes es muy útil). Draw no se llama útil. ¿Qué tenemos que hacer en Snake.cs? Bueno, hay que tener un timer para ir generando manzanas, así como comprobar que la serpiente se ha comido la manzana.

using Godot;
using System;
using System.Timers;

public class Snake : Node2D
{
    // 640x360
    // casillas de 40x40 (mcd 640,360)
    private System.Timers.Timer timer; // usamos los timers de .NET
    private static readonly Random rnd = new Random(); // random de .NET
    private Apple apple; // manzana activa
    private SnakeBody body; // serpiente
    public override void _Ready()
    {
        body = GetNode("SnakeBody") as SnakeBody; // obtenemos el nodo SnakeBody
        body.Position = new Vector2(0,0); // arriba a la izquierda
        timer = new System.Timers.Timer(10000); // cada 10 s
        timer.Elapsed += NewApple; // se llama a NewApple
        timer.AutoReset = true; // de forma infinita
        timer.Start(); // y empezamos a contar ya!
        apple = GetNode("Apple") as Apple; // obtenemos el nodo Apple
        apple.Position = new Vector2(rnd.Next(15)*40,rnd.Next(8)*40); // posicion aleatoria
    }

    public void NewApple(object src ,ElapsedEventArgs e)
    {
        if(apple != null){
            RemoveChild(apple); // quita el nodo de la escena si estaba
        }
        apple = new Apple();
        apple.Position = new Vector2(rnd.Next(0,15)*40,rnd.Next(0,8)*40);
        AddChild(apple); // anade motor a la escena
    }

    public override void _Process(float delta)
    {
        // siempre se comprueba si la serpiente se come la manzana
        if(apple != null){
            if(body.TryEat(apple)){
                RemoveChild(apple);
                apple = null;
            }
        }
        
    }
}

En este código ya vemos cosas interesantes. La primera es que podemos usar cualquier librería de .NET, en este caso he usado clases que forman parte de .NET Standard pero cualquier librería que funcione con Mono debería funcionar. También se puede usar NuGet, al final, Godot tiene un fichero SLN y un CSPROJ, por lo que no es más que un proyecto normal de C#.

La segunda cosa es que hay varias funciones para interactuar con Godot en sí: GetNode (para obtener un nodo, hay que hacer casting), AddChild (para añadir un nodo a una escena) y RemoveChild (para quitar un nodo a una escena).

using Godot;
using System;
using System.Collections.Generic;
using System.Linq;

public class SnakeBody : Sprite
{
    private float time = 0;
    private enum Direction{
        LEFT,
        RIGHT,
        UP,
        DOWN
    };
    private Direction direction;
    private List<Rect2> body;
    private bool eat = false;
    public override void _Ready()
    {
        // Called every time the node is added to the scene.
        // Initialization here
        direction = Direction.RIGHT;
        body = new List<Rect2>();
        body.Add(new Rect2(0,0,40,40));
        body.Add(new Rect2(40,0,40,40));
        SetZIndex(1);
    }

    public override void _Draw()
    {
        var color = new Color(1,0,0);
        foreach(var rect in body){
            this.DrawRect(new Rect2(rect.Position.x+2,rect.Position.y+2,36,36),color);
        }
    }

    public bool TryEat(Apple apple)
    {
        if(body[0].Position.x == apple.Position.x && body[0].Position.y == apple.Position.y){
            Console.WriteLine("EAT!");
            eat = true;
        }

        return eat;
    }

    public bool Crash()
    {
        return body.Skip(1).Any(t=>{
            return t.Position.x == body[0].Position.x && t.Position.y == body[0].Position.y;
        });
    }

    public override void _Process(float delta)
    {
        // Called every frame. Delta is time since last frame.
        // Update game logic here.
        time += delta;
        if(time > 0.5){
            Vector2 translation;
            switch(direction){
                case Direction.RIGHT: translation=new Vector2(40,0);break;
                case Direction.LEFT: translation=new Vector2(-40,0);break;
                case Direction.UP: translation = new Vector2(0,-40);break;
                default: translation = new Vector2(0,40);break;
            }
            if(body.Count > 0){
                var newRect = new Rect2(body[0].Position,body[0].Size);
                newRect.Position += translation;
                if(newRect.Position.x < 0){
                    newRect.Position = new Vector2(600,newRect.Position.y);
                }
                if(newRect.Position.x > 600){
                    newRect.Position = new Vector2(0,newRect.Position.y);
                }
                if(newRect.Position.y < 0){
                    newRect.Position = new Vector2(newRect.Position.x,320);
                }    
                if(newRect.Position.y > 320){
                    newRect.Position = new Vector2(newRect.Position.x,0);
                }

                body.Insert(0,newRect);
                if(!eat){
                    body.RemoveAt(body.Count-1);
                }
                if(Crash()){
                    Console.WriteLine("CRASH! Game Over");
                }
            }
            this.Update();
            time = 0;
            eat = false;
        }
    }

    public override void _Input(InputEvent @event)
    {
        if(@event.IsAction("move_left") && direction != Direction.RIGHT)
        {
            direction = Direction.LEFT;
            return;
        }
        if(@event.IsAction("move_right") && direction != Direction.LEFT)
        {
            direction = Direction.RIGHT;
            return;
        }
        if(@event.IsAction("move_up") && direction != Direction.DOWN)
        {
            direction = Direction.UP;
            return;
        }
        if(@event.IsAction("move_down") && direction != Direction.UP)
        {
            direction = Direction.DOWN;
            return;
        }
    }
}

El código de SnakeBody.cs es más largo, pero no más complejo. Como vemos la serpiente la represento como List<Rect2>. Además hay una variable time puesta para que la serpiente vaya a trompicones (como el snake auténtico).

Se puede ver como la función DrawRect nos sirve para dibujar un rectángulo. La API no tiene pérdida y es parecida a la API de Cairo o la Canvas de HTML5.

También se puede ver como se puede usar LINQ para comprobar las intersecciones de la serpiente consigo misma (en realidad se comprueba la cabeza con el resto de trozos, ya que la cabeza es la parte que va a estar presente en todos los golpes).

Con Update se fuerza una nueva llamada a _Draw.

Por último tenemos _Input. En Godot, la entrada se maneja por acciones, una capa de abstracción. Esto quiere decir que no es recomendable comprobar si una tecla ha sido pulsada, simplemente se asignan teclas a acciones desde Godot (o desde el juego en un panel de configuración) y en nuestro código comprobar las acciones.

Crear acciones

Para crear acciones vamos a Proyecto->Ajustes de Proyecto->Mapa de entrada y creamos las acciones que creamos convenientes. Yo las he llamado move_left, move_right, move_down y move_up. Luego las asignamos teclas de forma muy intuitiva.

Con esto ya tendríamos todo para un snake completito. Si le damos a ejecutar, podemos ver el juego en acción.

Todo el código del juego lo tenéis en el GitHub de ejemplos del blog y se puede importar a vuestro Godot.

 

Al juego le faltan muchas cosas, como una pantalla de game over cuando se produce un choque. Y puntuación. Y más detalles. Pero eso ya os lo dejo a vosotros.

 

La entrada Tutorial de introducción a Godot 3.0. Juego de Snake en C# aparece primero en Blog - Adrianistan.eu.

Domingo 28 de enero de 2018

Xavier Genestos

Xavier Genestos
SYSADMIT

Linux: Saber si existe un directorio o fichero

Con scripts de bash de Linux, podemos necesitar saber si existe un directorio o fichero para ejecutar una cosa u otra.Para saber si existe un directorio o fichero, podemos utilizar la sentencia if. Con la sentencia if, podemos especificar como parámetro si existe o no un directorio o fichero. Con el parámetro -d: Especificaremos un directorio.Con el parámetro -f: Especificaremos un

Jueves 25 de enero de 2018

Generar frases con cadenas de Markov. Machine Learning en Python

Hoy vamos a hacer un ejercicio muy sencillo de machine learning. Para ello usaremos cadenas de Markov. Trataremos de generar frases totalmente nuevas basadas en otras frases que le demos como entrada.

En mi caso voy a usar las frases del presentador argentino afincado en España, Héctor del Mar, porque siempre me han parecido bastante graciosas y tiene unas cuantas.

Héctor del Mar es el de la derecha. Para quien no le conozca, suele comentar los shows de la WWE

¿Qué son las cadenas de Markov?

Las cadenas de Markov es un modelo probabilístico que impone que la probabilidad de que suceda algo solo depende del estado anterior. Aplicado a nuestro caso con palabras, la probabilidad de que una palabra sea la siguiente de la frase solo depende de la palabra anterior. Observemos este grafo:

En él se han introducido dos frases: El coche rojo y El coche verde. La probabilidad de que coche sea la palabra que va después de El es del 100%, pero de que rojo sea la siguiente palabra después de coche es del 50%. Con este ejemplo, parece bastante limitado, pero la cosa cambia cuando metemos muchas frases y muchas palabras se repiten.

Para este ejemplo no obstante, usaré las dos últimas palabras como estado anterior, ya que suele dar resultados mucho más legibles (aunque pueden darse con más probabilidad frases que ya existen).

Obteniendo los datos

El primer paso será tener las frases en un formato óptimo. Para ello usaré requests y BeautifulSoup4. Las frases las voy a sacar de Wikiquote.

from bs4 import BeautifulSoup
import requests

r = requests.get("https://es.wikiquote.org/wiki/H%C3%A9ctor_del_Mar")
soup = BeautifulSoup(r.text,"lxml")
frases = map(lambda x: x.text.replace("\"",""),soup.select(".mw-parser-output li"))
palabras = map(lambda x: str(x).split(" "),frases)

Generando el grafo de Markov

Ahora hay que generar el grafo de Markov. Para ello vamos a usar un diccionario, donde en la clave tendremos el estado anterior, es decir, las dos últimas palabras (en forma de tupla). El contenido será una lista con todas las palabras a las que puede saltar. Al ser una lista, puede haber palabras repetidas, lo que efectivamente hará aumentar su probabilidad.

Aprovechando Python, voy a usar un defaultdict para simplificar el código, ya que con él me voy a asegurar de que todos los accesos al diccionario me van a devolver una lista.

from collections import defaultdict

almacen = defaultdict(lambda: list())

def add_word(prev,next):
    global almacen
    almacen[prev].append(next)

for frase in palabras:
    frase = list(frase)
    for i,palabra in enumerate(frase):
        if i == 0:
            add_word(("START","START"),palabra)
            continue
        if i == 1:
            add_word(("START",frase[0]),palabra)
            continue
        add_word((frase[i-2],frase[i-1]),palabra)

Generando una frase nueva

Ahora viene el último paso, generrar una frase nueva. Para ello, empezamos con el estado START,START y seguimos el grafo hasta que acabemos. Para elegir la siguiente palabra de la lista usamos random.choice. La frase que se va generando se queda en una lista hasta que finalmente devolvemos un string completo.

import random

def gen_word():
    word = list()
    state = "START","START"
    while True:
        w = random.choice(almacen[state])
        word.append(w)
        state = state[1],w
        if w.endswith(".") or w.endswith("!"):
            return " ".join(word)

Resultados

Veamos los resultados:

Las frases en rojo son frases que dijo de verdad. Las frases en verde son frases generadas por este machine learning. La tasa de frases nuevas no es muy elevada, pero son más del 50%. Y todas son bastante divertidas.

El código fuente completo de Markov-HectorDelMar está en el repositorio Git del blog: https://github.com/aarroyoc/blog-ejemplos/tree/master/markov-hector-del-mar

Ahora que ya sabes usar cadenas de Markov, ¿por qué no meter como dato de entrada El Quijote?, ¿o los tuits de algún político famoso?, ¿o las entradas de este blog? Las posibilidades son infinitas.

Para despedirme, como diría el Héctor del Mar de verdad:

Aquí estoy porque he venido, porque he venido aquí estoy, si no le gusta mi canto, como he venido, me voy. ¡Nos vamos, don Fernando!

La entrada Generar frases con cadenas de Markov. Machine Learning en Python aparece primero en Blog - Adrianistan.eu.

Lunes 22 de enero de 2018

TutorialesLinux.com: Borrar un volumegroup y extender el principal
TutorialesLinux.com: Cambiar IP de forma masiva en Plesk

Jueves 18 de enero de 2018

Bruno Exposito

Bruno Exposito
The Linux Alchemist

Comando chown – Cambiar el propietario

El comando chown (change owner) permite modificar el dueño de uno o varios ficheros o carpetas.

Está instalados en todas las distribuciones GNU/Linux, dentro del paquete coreutils.

Puedes consultar el listado de usuarios en el fichero /etc/passwd usando el siguiente comando:

 cat /etc/passwd | cut -d ':' -f1

 

chown

Sintaxis de chown

sudo chown {{dueño}}:{{grupo}} {{nuevodueño}} {{fichero-o-carpeta}}

Opciones de chown

-c, –changes Igual que la opción “verbose” pero solo si hay cambios
-f, –silent, –quiet Omite la mayoría de los mensajes de error
-v, –verbose Muestra el resultado de cada fichero procesado
–dereference Afecta a la referencia del enlace simbólico, en lugar del enlace simbólico en si (opción por defecto).
-h, –no-dereference Afecta al enlace simbólico, en lugar de la referencia a la que apunta.
–from=DUEÑO_ACTUAL:GRUPO_ACTUAL Cambia el dueño y/o grupo del fichero solo si el actual dueño y/o grupo coincide con el especificado.
Cualquiera de los dos puede ser omitido.
–no-preserve-root No trata “/” de manera especial (por defecto)
–preserve-root Falla al intentar operar recursivamente sobre “/”
–reference=RFILE Cambia la propiedad de file a la del fichero rfile.
-R, –recursive Se ejecuta sobre ficheros y directorios recursivamente
-H *Si es un enlace simbólico a un directorio, entra en el.
-L *Atraviesa todos los enlaces simbólicos a directorios que encuentre.
-P *No atravesar enlaces simbólicos (por defecto)
-v, –verbose Muestra el resultado de cada fichero procesado
–help Muestra la ayuda
–version Muestra la versión y licencia

* Se utiliza junto con el modificador -R

Cambiar el dueño de un fichero

Sintaxis

sudo chown {{usuario}} {{fichero}}

Ejemplos

sudo chown jose documento.txt

El fichero documento.txt que está dentro del directorio actual pasa ser propiedad del usuario jose.

sudo chown juan /home/bruno/Documentos/Reporte.pdf

El fichero Reporte.pdf pasa a ser propiedad del usuario juan, con independencia del directorio en el que te encuentres.

sudo chown pedro ~/Imágenes/foto.jpg

El fichero foto.jpg dentro de /home/TuUsuario/Imágenes pasa a ser propiedad de pedro.

sudo chown francisco “/home/bruno/Documentos/fichero con espacios.odt”

El fichero “fichero con espacios.odt” pasa a ser propiedad de francisco. Si el fichero o alguna carpeta tienen espacios debe estar entrecomillado.

Cambiar el dueño de todos los ficheros recursivamente

Sintaxis

sudo chown -R {{usuario}} {{carpeta}}

Ejemplos

sudo chown -R juan Imágenes

La carpeta Imágenes, y todos los ficheros/carpetas que están dentro (-R) pasan a ser propiedad de juan.

sudo chown -R jose “/home/bruno/Mis Imágenes”

La carpeta Mis Imágenes y todo su contenido pasa a ser propiedad de jose

sudo chown -R vicente ~/Imágenes

Mi carpeta /home/MiUsuario/Imágenes y todo su contenido pasa a ser propiedad de vicente.

Cambiar el dueño de todos los ficheros y carpetas del directorio actual que pertenecen a un determinado usuario.

Sintaxis

 sudo chown --from={{dueñoactual}} {{nuevodueño}} *

Ejemplos

sudo chown –from=jose bruno *

Todos el contenido del directorio actual que pertenezca a jose pasa a ser propiedad de bruno.

sudo chown –from=bruno fernando *

Todo con contenido del directorio actual propiedad de bruno pasa a ser propiedad de fernando.

Cambiar recursivamente el dueño de todos los ficheros y carpetas del directorio actual que pertenecen a un determinado usuario.

Sintaxis

 sudo chown -R --from={{dueñoactual}} {{nuevodueño}} {{carpeta}}

Ejemplos

sudo chown -R –from=jose bruno Documentos

Todos los fichero y directorios dentro de la carpeta Documentos (-R) que eran propiedad de jose pertenecen ahora a bruno.

sudo chown -R –from=juan bruno /home/juan/

Todos los ficheros y directorios dentro de /home/juan (-R) que eran propiedad de juan pertenecen ahora a bruno.

sudo chown -R –from=vicente jose .

Todos los ficheros y directorios del directorio actual (.) que eran propiedad de vicente pertenecen ahora a jose.

Cambia el dueño de todo el contenido de una carpeta si el actual dueño y grupo coincide con el especificado.

Sintaxis:

sudo chown -R --from={{dueño}}:{{grupo}} {{nuevodueño}} {{carpeta}}

Ejemplos:

sudo chown -R –from=juan:consultores javi Imágenes

La carpeta Imágenes y su contenido, cuyo dueño es juan y pertenece al grupo consultores es ahora propiedad de javi.

sudo chown -R –from=bruno:administradores paco ~

Tu carpeta /home/TuUsuario (~) y su contenido, propiedad del usuario bruno y que pertenece al grupo administradores pasa a ser propiedad de paco.

sudo chown -R –from=bruno:administradores jose /home/bruno

El directorio /home/bruno y su contenido,

Búsquedas complejas: find + chown

Para búsquedas mas complejas es posible usar el comando chown con find, ya que find permite realizar búsquedas por nombre, fecha, tipo, tamaño, etc

sudo find . -iname “*.txt” -exec chown bruno {} \;

Busca todos los archivos con extensión txt y les cambia el propietario a bruno.

sudo find . -type d -exec chown bruno {} \;

Busca todos los directorios (-type d) y les cambia el dueño a bruno.

Martes 16 de enero de 2018

TutorialesLinux.com: Habilitar PHPMyAdmin sin acceder a Plesk

Sábado 13 de enero de 2018

Como reparar un disco duro defectuoso o dañado

Los discos duros son una pieza básica en cualquier ordenador. Es allí donde se almacena toda la información de forma que graba magnéticamente nuestros archivos y datos digitales. Consejos de mantenimiento: Los componentes deben ser de calidad. No solo el disco duro propiamente. Todas las piezas están relacionadas y un fallo en la memoria RAM […]

La entrada Como reparar un disco duro defectuoso o dañado aparece primero en Blog de Informática ✏ Luisi.

Miércoles 10 de enero de 2018

Pedro L. Lucas

Pedro L. Lucas
Cartas de Linux

Desactivando los parches para los fallos en las CPUs de Intel en Linux

Los recientes fallos de seguridad en las CPUs de Intel llamados Meltdown y Spectre, han obligado modificar los sistemas operativos. Esto causa que los procesadores afectados lleguen a perder de un 5% hasta un 30% de rendimiento en la realización de ciertas tareas.

En determinados casos es un gran inconveniente. Existen situaciones en los que el usuario puede gestionar el riesgo de forma que, a costa de perder ese extra de seguridad, gane en rendimiento. Un ejemplo, supongamos que hay un grupo de científicos realizando cálculos matemáticos. Supongamos también que este grupo de científicos realizan sus cálculos en equipos aislados, de forma que no tienen interacción con otros equipos ni conexión con Internet. Perfectamente podrían deshabilitar los parches y continuar con sus cálculos con ese extra de rendimiento.

Otra situación: disponemos de un portátil. Cuando estemos navegando por Internet es totalmente necesario tener activado las protecciones frente a Meltdown y Spectre (y todas las medidas de seguridad que se nos ocurran). Supongamos ahora que nos vamos de viaje y no tenemos red (incluso puede que no tengamos ni posibilidad de conectarnos), suponamos que tenemos totalmente controlados los programas que vamos a ejecutar en ese tiempo y su procedencia. ¿No sería lógico desactivar dichas protecciones y así, posiblemente, ganar un de un 5% hasta un 30% más de rendimiento y de batería?

Lo que vamos a buscar aquí es cómo se deshabilitan dichas protecciones y qué condiciones podemos usar un equipo, con las protecciones desactivadas de forma segura.

¿Cómo se desactivan las protecciones?

Para desactivar estas opciones, hay que arrancar el ordenador y cuando aparezca el grub solicitando el sistema que queremos arrancar, pulsaremos la tecla e. Aparecerá un editor de texto. En este editor buscamos la línea que arranca el kernel y se le añade la opción “pti=off”. Es decir, al final tendremos que tener una línea similar a:

linux   /boot/vmlinuz-4.4-x86_64 root=UUID=a56... rw  quiet pti=off

Para comprobar si la protección ha sido desactivada, se debe teclear en un terminal.

dmesg | grep 'page tables isolation'

Si aparece la respuesta:

Kernel/User page tables isolation: disabled

es que la protección está deshabilitada y se tendrá el extra de rendimiento.

Evidentemente es más cómodo introducir una nueva entrada en el Grub de forma que podamos elegir entre un sistema seguro o un sistema un poco más rápido en el momento de arrancar.

¿Cuándo se debe deshabilitar estos parches?

Respuesta corta: Nunca.

He estado haciendo pruebas en mis equipos y para las tareas de oficina, programar/compilar, navegar o juegos, no parece que haya una pérdida de rendimiento acusada.

Tened en cuenta que por el sólo hecho de visitar una página web y que tengas un fallo en el navegador, te pueden infectar y usar tu sistema para minar bitcoin, obtener tus contraseñas,…

Como conclusión final sólo decir que el hecho de conocer cómo se desactivan estas protecciones conlleva la responsabilidad de saber usarlo sabiamente.

Espero que os sea útil.

Lunes 01 de enero de 2018

Xavier Genestos

Xavier Genestos
SYSADMIT

Linux: Saber dirección MAC

En este post veremos distintas formas de localizar la dirección MAC (Media Access Control) de un interfaz de red en sistemas operativos Linux. Linux: Saber dirección MAC: ifconfig Utilizando el comando ifconfig -a, podemos listar todos los interfaces.  El parámetro -a, nos permite que incluso los interfaces de red que no tengan link, aparezcan listados.  Ejemplo:

Miércoles 27 de diciembre de 2017

Emiliano A. González Salgado

Emiliano A. González Salgado
El blog de Emi

Prueba

Esto es una prueba.

Realizada con el cliente de sobremesa WordPress.

Trabajar con archivos PDF en Linux

PDF (sigla del inglés Portable Document Format, «formato de documento
portátil») es un formato de almacenamiento para documentos digitales
independiente de plataformas de software o hardware.

Los documentos son de tipo compuesto (imagen vectorial, mapa de bits y
texto).

Actualmente es de los mas usados para el intercambio de información.

En Linux existen programas para crear y editar documentos en dicho formato.

En estos momentos el sistema operativo que uso es Fedora 27 x86_64 KDE.

Mis herramientas principales son:

Visor de archivos: Okular.

Edición de documentos: MasterPDF Editor, LibreOfficeDraw y Xournal.

Creación de archivos PDF: LibreOffice(extensión pdfimport),

MasterPDF Editor y CUPS-pdf.

Formularios (principalmente cumplimentarlos): Okular. y

MasterPDF Editor.

Se pueden crear escaneando un documento o una imagen.

Para el escaneo, aunque  al instalar el driver de la multifunción ya
incorpora su programa, el que uso es Xsane,
un software bastante veterano, pero muy completo. Permite escanear desde el
alimentador automático y desde la base de escaneo. Salida en varios
formatos: PDF, jpeg, gif, png, bmp, etc. Multipágina o página
individuales.  Enviar a la impresora o al fax.

La multifunción es una Epson, y el programa de escaneo es “Image Scan! for
Linux”, que es muy simple, y efectivo, pero con un defecto, tiene una falta
de compatibilidad con el formato PDF. Lo he comprobado al aplicar un script
para comprimir ficheros de gran tamaño. Siempre me daba errores, lo que no
ocurre con Xsane.

La mayoría de los programas anteriores se encuentran en los repositorios de
gran parte de las distribuciones Linux.

Master PDF
Editor
es software propietario. Está desarrollado por Code
Industry
. En Linux se puede utilizar libremente, sin fines
comerciales, por ejemplo para propósitos educativos o personales. Para otros
fines habría que adquirir la respectiva licencia.

Para ver las características mas importantes lo mejor es consultar esta entrada
de El atareao.

Aunque ya tiene unos meses, ha habido pocos cambios.

El principal problema que nos encontramos en Linux con los archivos PDF es
el de la firma digital.

El único programa que tiene incorporado todo para la misma es Adobe Acrobat.
Para Windows y, creo que también, para Apple y Android.

En Linux, la versión que hay es antigua y de 32 bits. Discontinuada por
Adobe.

No trae soporte para firma digital.

Tengo la costumbre de escanear con alta resolución, normalmente 300 dpi, con
lo cual los archivos son de gran tamaño. Para optimizarlos suelo empelar un
scrip que encontré hace tiempo, y no me acuerdo dónde.

Lo tengo en un fichero ejecutable: comprimepdf.sh

El contenido es el siguiente:

#!/bin/sh

dpi=72

if [ $# -lt 2 ]

then

echo “usage: $0 input output [dpi]”

exit 1

fi

if [ $# -gt 2 ]

then

dpi=$3

fi

echo “Shrinking document…”

gs  -q -dNOPAUSE -dBATCH -dSAFER \

-sDEVICE=pdfwrite \

-dCompatibilityLevel=1.3 \

-dPDFSETTINGS=/screen \

-dEmbedAllFonts=true \

-dSubsetFonts=true \

-dColorImageDownsampleType=/Bicubic \

-dColorImageResolution=$dpi \

-dGrayImageDownsampleType=/Bicubic \

-dGrayImageResolution=$dpi \

-dMonoImageDownsampleType=/Bicubic \

-dMonoImageResolution=$dpi \

-sOutputFile=$2 \

$1

#sh comprimepdf.sh ~/input.pdf ~/output.pdf 150

Este último párrafo es la orden para ejecutarlo.

El modificador 150, se puede cambiar para aumentar o disminuir la
resolución.

Es muy efectivo. Archivos de mas 10 MB los reduce a 200 o 300 Kb. sin
afectar a su calidad.

Es necesario tener instalado Ghostscript
para que funcione.

Existe un script, que en Fedora se puede instalar desde los repositorios, shrinkpdf.sh,
pero después de utilizar ambos, prefiero el primero.

Trabajar con archivos PDF en Linux

PDF (sigla del inglés Portable Document Format, «formato de documento
portátil») es un formato de almacenamiento para documentos digitales
independiente de plataformas de software o hardware.

Los documentos son de tipo compuesto (imagen vectorial, mapa de bits y
texto).

Actualmente es de los mas usados para el intercambio de información.

En Linux existen programas para crear y editar documentos en dicho formato.

En estos momentos el sistema operativo que uso es Fedora 27 x86_64 KDE.

Mis herramientas principales son:

Visor de archivos: Okular.

Edición de documentos: Master
PDF Editor
, LibreOffice
Draw
y Xournal.

Creación de archivos PDF: LibreOffice
(extensión pdfimport)
, Master
PDF Editor
y CUPS-pdf.

Formularios (principalmente cumplimentarlos): Okular. y Master
PDF Editor
.

Se pueden crear escaneando un documento o una imagen.

Para el escaneo, aunque  al instalar el driver de la multifunción ya
incorpora su programa, el que uso es Xsane,
un software bastante veterano, pero muy completo. Permite escanear desde el
alimentador automático y desde la base de escaneo. Salida en varios
formatos: PDF, jpeg, gif, png, bmp, etc. Multipágina o página
individuales.  Enviar a la impresora o al fax.

La multifunción es una Epson, y el programa de escaneo es “Image Scan! for
Linux”, que es muy simple, y efectivo, pero con un defecto, tiene una falta
de compatibilidad con el formato PDF. Lo he comprobado al aplicar un script
para comprimir ficheros de gran tamaño. Siempre me daba errores, lo que no
ocurre con Xsane.

La mayoría de los programas anteriores se encuentran en los repositorios de
gran parte de las distribuciones Linux.

Master PDF
Editor
es software propietario. Está desarrollado por Code
Industry
. En Linux se puede utilizar libremente, sin fines
comerciales, por ejemplo para propósitos educativos o personales. Para otros
fines habría que adquirir la respectiva licencia.

Para ver las características mas importantes lo mejor es consultar esta entrada
de El atareao.

Aunque ya tiene unos meses, ha habido pocos cambios.

El principal problema que nos encontramos en Linux con los archivos PDF es
el de la firma digital.

El único programa que tiene incorporado todo para la misma es Adobe Acrobat.
Para Windows y, creo que también, para Apple y Android.

En Linux, la versión que hay es antigua y de 32 bits. Discontinuada por
Adobe.

No trae soporte para firma digital.

Tengo la costumbre de escanear con alta resolución, normalmente 300 dpi, con
lo cual los archivos son de gran tamaño. Para optimizarlos suelo empelar un
scrip que encontré hace tiempo, y no me acuerdo dónde.

Lo tengo en un fichero ejecutable: comprimepdf.sh

El contenido es el siguiente:

#!/bin/sh

dpi=72

if [ $# -lt 2 ]

then

echo “usage: $0 input output [dpi]”

exit 1

fi

if [ $# -gt 2 ]

then

dpi=$3

fi

echo “Shrinking document…”

gs  -q -dNOPAUSE -dBATCH -dSAFER \

-sDEVICE=pdfwrite \

-dCompatibilityLevel=1.3 \

-dPDFSETTINGS=/screen \

-dEmbedAllFonts=true \

-dSubsetFonts=true \

-dColorImageDownsampleType=/Bicubic \

-dColorImageResolution=$dpi \

-dGrayImageDownsampleType=/Bicubic \

-dGrayImageResolution=$dpi \

-dMonoImageDownsampleType=/Bicubic \

-dMonoImageResolution=$dpi \

-sOutputFile=$2 \

$1

#sh comprimepdf.sh ~/input.pdf ~/output.pdf 150

Este último párrafo es la orden para ejecutarlo.

El modificador 150, se puede cambiar para aumentar o disminuir la
resolución.

Es muy efectivo. Archivos de mas 10 MB los reduce a 200 o 300 Kb. sin
afectar a su calidad.

Es necesario tener instalado Ghostscript
para que funcione.

Existe un script, que en Fedora se puede instalar desde los repositorios, shrinkpdf.sh,
pero después de utilizar ambos, prefiero el primero.


Martes 26 de diciembre de 2017

Pedro L. Lucas

Pedro L. Lucas
Cartas de Linux

Recargando un portátil con la luz del sol: Cargadores solares

En el comercio se pueden encontrar placas solares de pequeño tamaño que permiten recargar un ordenador portátil:

placa

Estas placas tienen diversos adaptadores en función del portátil:

conectores

Pero… ¿en qué condiciones funcionan estos aparatos?

Os voy a contar mi pequeña experiencia con uno de estos cargadores solares, mis éxitos y fracasos. También os expongo un montón de dudas que me han surgido, por si alguien me puede contestar.

Hay que tener luz directa del Sol

La primera prueba que se me ocurrió hacer es colocar un teléfono móvil e intentar recargarlo (la mayoría de estas placas tienen salida USB). Para mi decepción descubrí que la carga era tremendamente lenta. ¿Qué estaba haciendo mal?

La primera lección que hay que aprender es que la placa debe recibir luz directa del Sol. Con luz directa del Sol me refiero que no debe haber nubes, ni ventanas de cristal. Mi error era que estaba poniendo la placa detrás del cristal de la ventana. El cristal tiende a absorber muchas radiaciones llegando menos luz de la que debiera a la placa.

Para que os hagáis una idea con una exposición directa al Sol, mi móvil necesita 1 hora (aproximadamente) para llegar al 100% de la carga. Detrás de la ventana, después de una hora, la recarga sólo aumenta entre un 20 y un 30% de la carga. Es decir, que sin exposición directa la carga es de 3 a 4 veces más lenta.

Mira los Watios que necesita tu equipo

Imagina que se te estropea la fuente de alimentación de tu portátil. Si tu portátil tiene una fuente de alimentación de 50W, deberás comprar una fuente de similar o más potencia. Si tiene menos, el portátil no permitirá recargar la batería y mostrará luces de error en la fuente. Paradójicamente, si la fuente tiene suficiente potencia, podría ser que el portátil funcionase aunque sin poder recargar la batería.

Pues con los cargadores solares pasa algo  parecido. Necesitarás tener más  o la misma potencia que la que marca tu equipo para funcionar.

Aquí además hay que añadir que los cargadores solares sólo suelen tener 18V de salida. La mayoría de portátiles, según sus especificaciones necesitarán 18, 18.5, 19 o incluso 20V. Por lo poco que he leído en Internet (el siguiente párrafo lo escribo respecto a lo que he leído, pero no lo he podido comprobar):

Si tu portátil necesita 19V y el cargador sólo suelta 18V en principio debería funcionar. Por lo que he leído tras Googlear, si la diferencia entre los voltios necesitados y los que suelta el cargador son pocos (dicen que menos de 3V), no tendría que dar problemas. Pero si tu portátil necesita 17V y el cargador libera 18V, el voltaje extra podría dañar el ordenador. Aquí cada uno debe medir sus riesgos. Una vez establecido el voltaje, los amperios deben ser mayores o iguales a los de tu equipo. Más amperios de los necesarios significará que estamos desperdiciando potencia. Si tenemos menos amperios de los necesarios, se podría dañar la batería, por lo que los portátiles cortan la corriente y muestran luces de error en la fuente de alimentación. Pero esto es lo que he leído en la red, si alguien tiene información más precisa o ve algo erróneo, que me lo comente en los comentarios y lo corregiré.

La moraleja de esta historia es que: Antes de comprar uno de estos cargadores habrá que asegurarse de que sea compatible con nuestro equipo.

En mi caso he tenido 2 portátiles para probar, los dos necesitaban 19V para funcionar. Uno necesita 30W para funcionar, el otro 45W.

Los he conectado a un cargador solar de 40W. El de 30W ha funcionado sin problemas. En el de 45W no he podido recargar la batería (salvo en condiciones muy especiales), pero sí hacerlo funcionar durante horas sin hacer uso de la batería.

Un detalle del que me he podido percatar es que según se va cargando la batería, menos potencia solicita el portátil al cargador. Así, con el portátil de 45W usando el cargador solar de 40W he podido hacer recargas cuando la batería tenía la carga suficiente (en torno al 85% del total de la batería).

Lo que sucede con el portátil de 45W me resulta del todo extraña, ¿sólo por 5W de diferencia no puede hacer recargas con la batería por debajo del 85%? ¿Pedirá el ordenador al cargador el tope de amperios que necesita aunque esté apagado para hacer recargas rápidas? Si alguien tiene la respuesta, agradecería que me lo comentase.

¿Cómo saber la potencia que necesita tu portátil?

La potencia que necesita un equipo se mide en watios y es el resultado de multiplicar la tensión (los voltios) por la intensidad (amperios):

P=V·I

Estos datos suelen estar por la parte posterior del portátil y en el cargador del mismo. Por ejemplo, si mi portátil necesita 19V y 1.58A, la potencia necesaria será P=19V·1.58A=30W.

La orientación y el ángulo influyen

En España una placa solar debería tener orientación sur y estar inclinada 40°. La placa plegable de la imagen de la cabecera del artículo es compleja de colocar, por lo que uno tiene la tentación de dejarla tendida en el suelo. Si lo hacemos así, estaremos perdiendo parte de la potencia disponible. Para cargar un teléfono móvil, no habrá gran problema, pero puede que para algo más grande, como un portátil, tengamos que orientarla correctamente.

La siguiente imagen muestra la posición del Sol en Madrid en función del día y hora solar obtenida de la página sunearthtools.com:

solar-diagram-cartesian-1513529014468

La posición de 180° del eje horizontal representa el sur. El eje vertical representa el ángulo de inclinación respecto al suelo. A través de esta imagen, uno se puede hacer una idea de cómo sacar el mayor rendimiento a su placa solar.

¿Y cuando hay nubes?

Las nubes reducen la cantidad de luz que llega hasta la placa. Esto significará que va a generar menos potencia. Por ejemplo, he hecho pruebas dejando el teléfono móvil cargando en situaciones de nubes y me he encontrado que después de una hora cargando, que en condiciones normales le debería cargar casi al 100%, la carga apenas se ha incrementado en un 20%.

Es decir, con nubes la carga se ralentiza mucho. Pero sigue produciendo. Me comentaron de unas personas que tenían paneles solares en su casa, al preguntarles por el tema de las nubes respondieron que con nubes también tenían producción. Por la poca experiencia que he acumulado, supongo que tendrían mucha potencia instalada, para que cuando viniesen las nubes la potencia que les quedase fuese la justa.

De todas formas, en España el problema de las nubes dura muy poco. Antes de tener la placa recarga-portátiles, me regalaron una para poder cargar el teléfono móvil con una potencia de 10W. El teléfono lleva más de un año sin tocar la red eléctrica.

No pongas el móvil o el portátil al Sol



Cuando recargues usando un cargador solar, el equipo a ser recargado debe estar a la sombra y fresco. El Sol puede dañar el dispositivo. Además las baterías se degradan con el calor. Muchos cargadores solares tienen un bolsillo para guardar el móvil mientras carga. No lo uséis a no ser que haga frío.

Por otro lado vais a ver que existen baterías con una placa solar incorporada. Desde mi punto de vista, esa placa solar es sólo para emergencias. Una batería al Sol durante mucho tiempo, a no ser que haga frío, se va a degradar acortando su vida útil.

Tipos de cargadores solares

Existen 3 tecnologías actualmente para las placas solares silicio monocristalino, silicio policristalino y silicio amorfo. Las placas de silicio monocristalino son las que más rendimiento ofrecen. Suele ser de un 20% a un 25% de rendimiento según las condiciones. Son las más caras de conseguir.

Las policristalinas ofrecen un rendimiento menor que las monocristalinas, pero son mucho más baratas.

El silicio amorfo es la tecnología más barata pero de menor rendimiento. Pero tiene la ventaja de que se pueden fabricar en paneles flexibles.

Los distinguiréis por su color, las monocristalinas son de un color azul oscuro o negro, las policristalinas suelen tener un color azul y si os fijáis notaréis una especie de dibujos en diversas tonalidades de azul. Las de silicio amorfo suelen ser de color marrón:

Respecto a la huella ecológica, por lo que he podido leer, suponiendo que la placa estuviese todo el día al Sol, una placa de silicio monocristalino necesitaría 2 años para empezar a producir más energía de lo que costó fabricarla. La policristalina necesita casi un año. El silicio amorfo apenas unos meses.

Una última nota sobre el rendimiento, la siguiente imagen muestra una placa de silicio policristalino de 13W. Bajo ella una placa de silicio monocristalino de 40W. Con menos superficie el silicio monocristalino ofrece mayor potencia debido a su mayor rendimiento:

No te fies de las denominaciones del fabricante
Recuerdo que hace años tuve un reloj digital. Este tenía la siguiente inscripción:

“Water resistant 50M”

Pregunté que significaba y alguien me contestó que lo podías meter en el agua hasta 50metros de profundidad. Me hice con los códigos del fabricante y 50M significaba que soportaba gotas de agua…

Este es un ejemplo de cómo los códigos usados por los fabricantes te pueden inducir a error.

Pues si una placa se denomina “Loquesea 50W”, habrá que percatarse de que esos 50W son watios y no un código de fabricante.

También hay fabricantes que aseguran que sus placas tienen un 25% de rendimiento. Si consultáis la literatura científica, os dirán que esos rendimientos sólo se obtienen en condiciones de laboratorio. En condiciones reales, la producción es más baja.

Hay personas que se construyen sus propios cargadores solares

Yo me he limitado a comprar un producto ya preparado. Pero hay personas que se lo construyen ellos mismos, todo por poco más de 100€:

Incluso existe un aparato, llamado inversor, que permite transformar la corriente continua en alterna. Allí conectan la placa y pueden alimentar cualquier dispositivo:

Finalmente, los hay que, a través de un enchufe de su casa, inyectan la energía solar ¡en la propia casa!

Espero que os haya resultado útil. Hasta la próxima.

Miércoles 20 de diciembre de 2017

Ramón Miranda

Ramón Miranda
Ramon Miranda

Remember me 2017

Para despedir el año 2017 me parece que esta imagen es muy acertada. La despedida de un año muy especial por todo lo que ha pasado y lo que no. A todos los que habéis estado allí os mando un abrazo. "Remember me", es mi pequeño toque de atención al mundo.
El objetivo era capturar ese ultimo momento cuando ves a alguien importante por ultima vez.

El trasfondo es que estaba probando un poco un pincel llamado "Pencil texture" y viendo como le afectaban modificaciones activando rotacion / por Random Dab, El tamaño on/off y un poco de toqueteo en las curvas. Algunas veces se añade mucha versatilidad sin esfuerzo.
Espero que os guste y gracias por comentar o compartir.



English Readers:
Hi, today Black and white like some feelings sometimes. In this case i have used charcoal style. Title is "Remember me" and the goal was to capture this last moment when you see someone important for the last time. How do you think i could give more emotional impact?

The underpainting was i was experimenting a bit with only one brush called "pencil texture" and tried some modifications basically activating Rotation by random dab, Size on/off, and a bit of curve tweaking. Sometimes we add a lot of versatility with no effort.
Thanks for sharing and comments

Jueves 14 de diciembre de 2017

Xavier Genestos

Xavier Genestos
SYSADMIT

Linux: Configurar teclado español

Uno de los problemas con los que nos podemos encontrar al administrar un equipo con Linux, es que en el idioma del teclado, no esté configurado el español. El procedimiento para configurar el idioma del teclado al español,  es distinto según la distribución de Linux utilizada. Veamos algunos ejemplos para configurar el idioma del teclado al español, con las distribuciones de Linux mas

Sábado 02 de diciembre de 2017

Aunque se me caen las bragas por Godot, sigo teniéndole cariño a Löve

A quién no se le caiga las bragas al suelo por Godot, o es un insensible o esta ciego y es un yonki de mierdas privativas como Unity3D.

Godot, si no lo es ya, en el próximo año seguro que ya empieza a haber ofertas de trabajo muy golosas para trabajar con este engine de videojuegos.

Pero toda telenovela para que dure mucho, tiene muchos episodios y muchos amoríos y tal. Y uno de mis primeros amores fue Löve un engine de videojuegos basado en el lenguaje de programación Lua.

Pues claro, siempre vienen suspiros y pensar que fue de ese amorío de los primeros episodios de la telenovela, y encontrarte navegando por ahí una entrada en reddit que dice Love2D showcase, donde piden ejemplos de juegos wenos wenos en Löve y del que ordeñando los comentarios se pueden sacar los siguientes links:

Ale, ya tenéis un buen listado de videojuegos libres (y algunos no libres…y algunos no-videojuegos) para entreteneros.

Martes 14 de noviembre de 2017

Liher Sanchez

Liher Sanchez
El blog de Liher

Cómo crear un sitio web con un constructor de sitios web y un diseño listo

Si no eres bueno en el diseño, y tampoco eres un profesional del diseño de sitios web, podemos ofrecerte una manera más fácil de crear un sitio web. Tu sitio web nuevo no sólo será totalmente funcional, sino también atractivo, es decir, creado de acuerdo con todas las tendencias de moda del diseño web de hoy.

Un constructor web y una plantilla prediseñada te ayudarán a completar esta tarea difícil. Así pues, hoy vamos a hablar de las nuevas plantillas de sitios web de TemplateMonster que han sido desarrolladas especialmente para MotoCMS 3.0.

 

 

Las ventajas principales del constructor de sitios web de MotoCMS 3.0

La principal diferencia entre el motor de MotoCMS y otros sistemas de gestión de contenidos es la simplicidad y claridad del primero. Te permite editar plantillas simplemente arrastrando y soltando varios elementos de sus diseños.

Ahora no tienes que saber codificar, no se te obliga a programar nada o hacer otras cosas técnicas. Simplemente arrastra y suelta los elementos prediseñados, textos e imágenes y obten un diseño único y funcional.

En otros CMS normalmente se te ofrece sólo un panel de administración y una plantilla prediseñada. Y todo lo que puedes hacer en el panel es crear páginas y añadir contenidos a ellas.

Mientras tanto, MotoCMS incorpora un poderoso editor visual que te permite crear un diseño de plantilla único arrastrando y editando diferentes elementos preestablecidos.

Es decir, no tendrás que codificar nada y preocuparte por el rendimiento del sitio en caso de que algo salga mal en el código. Todas tus configuraciones y experimentos con el diseño se guardarán automáticamente y el código del sitio permanecerá perfecto y funcionará adecuadamente en cualquier navegador.

La creación de sitios web con el constructor web de MotoCMS tiene un montón de ventajas:

  • Facilidad y comodidad. Incluso un principiante inexperto no tendrá problemas con su uso.
  • No se requiere programar o codificar nada.
  • Una gran cantidad de plantillas de alta calidad.
  • Sistema de edición visual sencilla de arrastrar y soltar.
  • Selector de colores único.
  • Alta velocidad de carga de sitios web.
  • Plantillas adaptativas y creadas de acuerdo con todas las tendencias actuales del diseño web.
  • Optimización para SEO.
  • Versión de prueba gratuita de 14 días.

 

 

Presta atención al último punto. Puedes probar este constructor web completamente gratis, experimentar con los ajustes, construir tu propio diseño único y, a continuación, si te gusta el resultado, comprar el sitio web creado y transferirlo a tu propio alojamiento web. En este caso, no perderás ningún dato. Nos parece una opción muy buena y útil.

Además, el producto se te ofrece junto con el servicio de soporte técnico, por lo que siempre puedes solicitar ayuda, en caso de que te confundas en algo o no puedas entender algo. Podrás solicitar ayuda del equipo de asistencia técnica justo después del registro en el sitio y obtendrás respuesta a cualquier pregunta tuya.

Hay cinco secciones principales en el panel de control de MotoCMS 3.0:

  1. Pages/Páginas. Se te permite crear y editar fácilmente páginas del sitio, personalizar su apariencia y al mismo tiempo hacer la optimización para los motores de búsqueda (SEO).
  2. Design/Diseño. En esta sección, se te permite personalizar la parte visual del diseño, el diseño del texto, los fondos, los estilos y los widgets. Estos últimos, a su vez, tienen sus propios ajustes preestablecidos que puedes modificar fácilmente.
  3. Multimedia library/Biblioteca multimedia. Una sección especial para trabajar con todos los archivos multimedia: videos, audios, etc.
  4. Configuration/Configuración. Los ajustes principales del sitio, así como la opción de integración de las herramientas de webmaster (para usuarios avanzados).
  5. Blog. Una sección separada para las configuraciones de visualización y funciones de blog.

Estas secciones puedes editar a tu gusto y tantas veces como deseas. Crea tu propio sitio, añade los widgets y bloques necesarios, inserta archivos multimedia, textos, tablas o cualquier otra cosa. Todo esto es fácil y rápido de configurar, así que, incluso una persona que nunca ha trabajado en el desarrollo web, podrá construir su propia página web sin mucho esfuerzo.

Las categorías principales de las plantillas MotoCMS 3.0 de TemplateMonster:

  • Arte y cultura;
  • Animales;
  • Diseño y fotografía;
  • Educación y libros;
  • Negocios y servicios;
  • Autos y motos;
  • Computadoras e Internet;
  • Electrónica;
  • Entretenimiento, juegos y vida nocturna;
  • Hogar y familia;
  • Moda y belleza;
  • Comida y restaurantes;
  • Vacaciones, regalos y flores;
  • Medicina;
  • Bienes raíces;
  • Sociedad y gente;
  • Deportes, naturaleza y viajes.

Como puedes ver, hay temas para todos los gustos. Y si no has encontrado una plantilla adecuada, entonces, créala por tí mismo! 🙂 Todo esto es muy fácil de hacer con el constructor web de MotoCMS 3.0. A pesar de toda esta simplicidad, tu sitio web todavía tendrá un aspecto profesional y fiable.

Todas las nuevas plantillas creadas por TemplateMonster para MotoCMS 3.0 son 100% adaptativas. Esto significa que funcionarán perfectamente en cualquier dispositivo y se adaptarán automáticamente a cualquier tamaño de pantalla.

Por supuesto, todas las nuevas plantillas incluyen aquellas características modernas, como el efecto de paralaje, la tipografía elegante, la adaptabilidad, los iconos de alta calidad, la animación preintegrada, el diseño de alta calidad en CSS3 y HTML5 y mucho más.

Miércoles 25 de octubre de 2017

Gorka Urrutia

Gorka Urrutia
Nideaderedes

Solución para la nueva ley de protección de datos en PrestaShop

Si tienes una tienda online con PrestaShop esto te va a interesar. Están preparando una completa solución que te ayudará a que tu tienda PrestaShop cumpla con la nueva ley de protección de datos, el famoso RGPD. Está abierto a empresas y autónomos y la participación es gratuita.

Viernes 13 de octubre de 2017

Liher Sanchez

Liher Sanchez
El blog de Liher

Ganar dinero en Internet

No hay duda de que, hoy en día, Internet pone al alcance de nuestras manos un sinfín de posibilidades para muchas facetas de nuestra vida. Una de las mas importantes es el conocimiento, hay muchas páginas web en las cuales podemos aprender cualquier cosa que queramos, es una gran ayuda para cualquier persona que tenga ganas de aprender cosas nuevas, sea de la temática que sea, como por ejemplo los idiomas, no se si conoceréis el traductor de Google, pero es muy bueno ya que permite traducir entre muchos idiomas y tiene la opción de escuchar las traducciones o decir la palabra o frase que queréis traducir en vez de teclearla para ayudarnos así a aprender a hablar en ese idioma. A mi me ayuda bastante para hacer los deberes del colegio con mis hijas.

Otra de las bondades de Internet es la posibilidad de conocer gente de cualquier lugar del mundo de una forma muy sencilla, para ello las redes sociales son un medio muy bueno. Otra opción que tenemos en Internet es ganar algo de dinero o incluso, si se nos da bien, vivir de Internet, aunque eso pocos lo logran, pero la posibilidad esta ahí, eso es innegable. Hoy os quiero hablar un poco de esto, ya que conozco de cerca algunos casos que os voy a comentar.

Una amiga mía conoce una pareja que creo una página web en la cual hablaban de muchas cosas que rodeaban a las personas que hicieron la EGB en mi país, hablan de recuerdos de la gente que estudiamos en aquella época y con el tiempo fueron creciendo y han conseguido llegar a vivir de ello, de hecho han publicado libros y juegos, entre otras cosas. Esta web se llama Yo fui a EGB y esta muy bien ya que te hace recordar cosas que, por lo menos yo, ya tenia olvidadas. Esta es una muestra de como un hobby se puede convertir en tu forma de vida, algo que a muchas personas nos gustaría.

 

 

Otro caso de como ganar dinero en Internet es el trading. En alguna ocasión me había interesado en esto pero nunca he terminado por informarme bien. Yo pensaba que era necesario tener conocimiento avanzados sobre finanzas para poder sacar provecho del trading pero no es así. Hace poco he hablado con un amigo sobre temas de ordenadores y me estuvo hablando de lo que hace su mujer para ganarse un sueldo. Trabaja desde casa y lo hace con el Ibex trading, me estuvo explicando un poco como iba el tema, aunque el no lo hacia ya que que su mujer quien se dedica a ello. Dedicas unas horas al día, el tiempo varia según el día, pero viene a ver como una jornada partida, es decir, unas 4 horas diarias mas o menos. Con dedicarle ese tiempo, una inversión mínima y paciencia ha llegado a conseguir un sueldo que mucha gente no tiene en un trabajo normal hoy en día, lo cual es mucho decir. Por lo tanto esta es otra opción de ganar dinero en Internet.

Otra opción que no me había planteado como una forma de ganar dinero en Internet es el tema de las apuestas. Como todo en esta vida hay quien convierte esto en una manera de ganarse las habichuelas. En este caso conozco a una persona que se lo toma como un trabajo y esta todo el día informándose sobre cualquier cosa relacionada con el deporte para poder afinar las apuestas todo lo posible. Hay muchas empresas que dan estos servicios y una buena forma de empezar seria ir a una web en la cual poder conocer las ventajas de este tipo de webs para elegir la adecuada. Después ya tendréis los datos necesarios para elegir una web de apuestas y poder empezar. En esa web tenéis también noticias deportivas para poder estar al día, algo muy importante si queréis conseguir un dinerillo.

Hay mas formas de ganar dinero en Internet pero hay algo que es necesario en todas ellas, lo que haces te tiene que gustar y apasionar ya que de otra forma sera difícil conseguir algo. En mi caso puedo decir que el dinero que gano con este blog, aunque sea poco me sirve para lo que busco. Algunas de las cosas que me puedo permitir son:

  • Tener un VPS para la web y otros proyectos
  • Me permite cambiar de ordenador cada poco tiempo y comprarles accesorios para así estar al día
  • Hacer donaciones a proyectos de software libre

Y poco mas, algún capricho pero pequeñito. Ahora tengo en mente comprar un portátil viejito para ponerlo a punto y usarlo para probar distribuciones Linux en un ordenador mas limitado. También voy a comprar un disco Msata SSD para mi portátil de 120 GB. En esas cosas dedico el dinero que gano con el blog, así os puedo dar opiniones de primera mano sobre estas cosas.

Un saludo a todos.

Lunes 02 de octubre de 2017

Bruno Exposito

Bruno Exposito
The Linux Alchemist

Solución al mensaje “se ha detectado un problema en un programa del sistema”

Desde hace ya algún tiempo, Ubuntu arrastra un pequeño (aunque molesto) problema. Se titula “Se ha detectado un problema en un programa del sistema” y es cortesía del sistema de reporte de errores de Ubuntu (apport).

se-ha-detectado-un-problema-programa-sistema

Lo que ha ocurrido es que alguna aplicación se ha cerrado inesperadamente, el fallo se ha almacenado en /var/crash y apport insiste en reportarlo.

 

No es un problema excesivamente importante, aunque es bastante molesto y alarma a los nuevos usuarios, que creen que está fallando constantemente algo.

 

Hay dos soluciones: limpiar la carpeta donde se almacenan los informes de errores o desactivar la aplicación que reporta los errores (apport).

 

¿Como borro el log de los errores de Ubuntu?

Pues es sencillo, solo es necesario ejecutar el rm como root sobre el contenido de la carpeta.
sudo rm /var/crash/*

 

¿Como desactivo el reporte de errores en Ubuntu?

Editando el fichero [b]/etc/default/apport/b] con cualquier editor:
sudo nano /etc/default/apport
sudo gedit /etc/default/apport
sudo pluma /etc/default/apport
sudo kate /etc/default/apport
sudo vi /etc/default/apport

Y cambiando el valor de enabled a 0. Tal que así:
enabled=0

Viernes 29 de septiembre de 2017

Ubuntizando.com

Ubuntizando.com
Ubuntizando.com

La nueva consola de Atari usará Linux y mola cantidad

Atención jugones y nostálgicos, Atari prepara el inminente lanzamiento de su nueva consola. La primera desde la Atari Jaguar de 1993 lo cual es ya un montón de tiempo y parece que Atari tras aprender de los errores quiere volver por la puerta grande. Por lo pronto vamos conociendo detalles de lo que está por llegar.

Con un aspecto retro que recuerda a la atari 2600, la Ataribox contará con un lector de tarjetas SD, cuatro puertos USB y una salida HDMI en el exterior y un procesador AMD y con una unidad gráfica basada en la tecnología Radeon. Sí, lo sé… estoy siendo muy vago en detalles pero es que hasta la fecha todo es de un secreto que asusta. No se ha revelado qué clase de modelo de GPU y CPU están incluidos en el chip AMD, ni la cantidad de memoria que tendrá.

Lo que sí sabemos es que Atari apostará por GNU/Linux como sistema operativo principal.  Lo cual de entrada supone una oportunidad muy interesante para afirmar “¿Quien dijo que en GNU/Linux no se podía jugar?”

Se estima que la nueva consola de Atari vendrá a costar unos 249 a 299 dólares según configuración aunque se desconoce fecha exacta de salida al mercado.

Fuente: juegosadn / gamingonlinux.com

Ubuntizando.com

Ubuntizando.com
Ubuntizando.com

10 elementos esenciales del plan de proyecto perfecto

La semana pasada tuve el placer de colaborar en la organización y celebración de una nueva edición del WordPress Pontevedra donde profesionales y curiosos tienen su punto de encuentro para discutir diferentes aspectos sobre esta plataforma de contenidos. Allí tuve ocasión de coincidir y hablar con una antigua colaboradora sobre un proyecto pasado donde participamos como freelance para un cliente que “no salió del todo bien”.

Lo cierto es que no suelo hablar mucho de mi trabajo en el blog pero creo importante compartir mis impresiones. Algunas veces los proyectos no salen bien aunque sobre el papel todo parece muy fácil. Claro está que en este caso el papel era más una servilleta arrugada con un par de anotaciones y claro… qué podríamos esperar de ello. Mi culpa no fue darme cuenta y salir corriendo de la primera reunión. Tengo que aprender a decir NO. Este proyecto en particular supuso una continua perdida de horas de trabajo, consumo de tiempo y el que no pudiera atender como debiera a otros clientes. Sinceramente un desastre donde no gané dinero, perdí mis nervios y del que todavía me estoy recuperando.

Mi experiencia me dice que cuando se gestiona un proyecto antes hay que trabajar en plasmar cuanta idea sea posible y determinar la toma de decisiones necesarias y sus razones para poder lograr el éxito. No valen las ocurrencias de último momento y menos el “marear al personal apagando fuegos con cambios constantes”.  Claro que una cosa es decirlo y otra es hacer. No es fácil y hay radica el poder de un buen gestor de proyectos.

Para ilustrar lo que digo encontré en Pinterest la siguiente infografía que deja muy claros los pasos que deben darse y qué evitar a la hora de gestionar nuestros proyectos.

10 elementos esenciales del plan de proyecto perfecto
Infografía ofrecida por Wrike – Gestión De Proyectos

Ubuntizando.com

Ubuntizando.com
Ubuntizando.com

Microsoft ingresa en la Open Source Initiative

Microsoft Loves Linux Foto: arstechnica.com

Foto: arstechnica.com

¿Recordáis todo ese rollo de que Microsoft ahora ama a Linux y que romance y patatín. Pues parece que va en serio? Bromas a parte esta semana se acaba de anunciar que Microsoft ingresa en la Open Source Initiative (OSI) como patrocinador oficial. Esto supone todo un hito en la historia de la organización encargada de promocionar el código abierto.

Idilio o mero interés seguro traerá importantes novedades en el futuro. Eso sí, la noticia ya ha causado importantes reacciones dentro de la comunidad. Es el caso de Stallman, poco entusiasta con el amor que ahora Microsoft deposita en Linux, quien afirma lo siguiente:

Sin duda se ve de esa manera. Pero no será tan fácil extinguirnos, porque nuestras razones para usar y avanzar en el software libre no se limitan a la conveniencia práctica.

Queremos libertad. Como una manera de usar las computadoras en libertad, Windows no es un comienzo.

Esto no avanza la causa del software libre, ni una pizca. El objetivo del movimiento del software libre es liberar a los usuarios de sistemas propietarios, que niegan la libertad como Windows […].

Una opinión que no comparte Mark Shuttleworth, de Canonical y Ubuntu:

No es que Microsoft esté robando nuestros juguetes, es más que los estamos compartiendo con Microsoft para dar a todos la mejor experiencia posible.

WSL proporciona a los usuarios que son bien versados en el entorno de Windows con mayor variedad y flexibilidad, al tiempo que abre una nueva base de usuarios potenciales para la plataforma de código abierto.

O Patrick Masson, Gerente General y Director de Junta de la OSI:

Este es un importante hito para la OSI y el movimiento del Open Source para tener una mayor difusión. No creo que haya una mayor prueba de madurez, viabilidad, interés y éxito para el Open Source que no solo el reconocimiento de Microsoft, sino también su apoyo como patrocinador, así como su participación como contribuyente a muchos proyectos Open Source y comunidades.

Lo que sí parece claro es que desde que Satya Nadella fuera nombrado CEO del gigante de Redmon, Microsoft ha dado un giro radical en torno al Open Source y Linux. Muy opuesta y en nada tiene que ver con la dirección que la compañía con Ballmer al frente en 2001:

Linux es un cáncer que se une en un sentido de propiedad intelectual a todo lo que toca

¿Cómo cambió el cuento? ¿Cierto?

Domingo 24 de septiembre de 2017

José María Morales Vázquez

José María Morales Vázquez
tecnología – Un lugar en el mundo…

Chuletillas (y XXXXVIII) – Cambiar el formato de tablas de MySQL o MariaDB de Antelope a Barracuda (para instalar o actualizar Moodle)

chuletaLas últimas versiones de moodle exigen que las tablas usen InnoDB con formato Barracuda en lugar de Antelope. De hecho, en algunos casos puede que la actualización falle sólo por el hecho de no cumplir este requisito y sin que medie ningún comentario informativo acerca de cual es el origen del problema.

Para evitar este problema tenemos que añadir las siguientes líneas en el archivo my.cnf de configuración de mysql o mariadb:

innodb_large_prefix=ON
innodb_file_format=Barracuda
innodb_file_per_table=ON
innodb_file_format_check=ON
innodb_file_format_max=Barracuda

No soy un gran experto en bases de datos, mi lector habitual ya lo sabe, pero tengo entendido que la principal ventaja que aporta Barracuda es la compresión de datos. Quién quiera hablar sobre ello con propiedad puede echarle un vistazo a este texto. En cualquier caso, si quieres seguir usando moodle no tienes mas remedio que pasar por el aro. Son lentejas, ya sabes 😉

Artículo Original: .

Este artículo pertenece a Un lugar en el mundo... Si quieres ver actualizaciones y comentarios interesantes visita el texto original en: Chuletillas (y XXXXVIII) – Cambiar el formato de tablas de MySQL o MariaDB de Antelope a Barracuda (para instalar o actualizar Moodle) || Hospedado en un Cloud VPS de Gigas.

Lunes 18 de septiembre de 2017

Gaspar Fernández

Gaspar Fernández
Poesía Binaria

Bash: ¿Cómo ejecutar código antes y después de cada comando? Logging, monitorización, notificaciones y mucho más

Ejecutar código antes y después de cada comando

Con el fin de hacer nuestro sistema (o servidor) más flexible. Aunque podemos hacer muchas cosas con estas técnicas. Es de gran utilidad poder ejecutar un script justo antes de la ejecución de cualquier orden de Bash y que, justo cuando esta orden termine, podamos ejecutar cualquier otra cosa. Esto nos abre las puertas, por ejemplo a notificaciones de inicio/finalización, logging, monitorización y muchas más posibilidades que veremos en futuros posts. Cosas que podremos hacer tanto en el ámbito local, como en servidores de forma muy sencilla.

Aunque otros intérpretes, como ksh, tcsh, zsh y algunos más tienen facilidades para estas tareas. Vamos a hacerlo en bash, ¡porque somos unos valientes! Porque se instala por defecto con muchas distribuciones y porque es el que me he encontrado con más frecuencia.

Ejecutar algo cuando termina un comando

Cuando un comando se ha ejecutado y Bash nos vuelve a pedir una nueva orden, justo antes de darnos el control, y para mostrar el prompt (ese texto que suele ser usuario@host /directorio/actual y termina en un dólar o una almohadilla), Bash, ejecutará lo que contenga la variable PROMPT_COMMAND, ya sea una función, un alias, o la ejecución de un programa. Vamos a hacer una prueba:

PROMPT_COMMAND=”date”
lun sep 18 10:23:47 CEST 2017
pwd
/home/gaspy
lun sep 18 10:24:47 CEST 2017

Incluso si sólo pulsamos enter, como se vuelve a generar el prompt, justo antes nos mostrará la fecha (porque el comando a ejecutar es date)

Como ejemplo práctico, vamos a hacer un pequeño script que nos notificará cuando alguna partición de nuestro disco duro llegue a un punto crítico, en este caso, vamos a revisar todas las particiones de /dev/sdb y avisar al usuario cuando alguna de estas sobrepase el 90% (opciones que podremos configurar luego), para ello, vamos a crear un script llamado critp.sh con lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh

PARTITION_PATTERN="/dev/sdb*"
WARNING_PERCENT=90
__RED='\033[1;31m'
__YELLOW='\033[1;33m'
__NC='\033[0m' # Color end

function space_notifier()
{
        local OLDIFS=$IFS
        IFS=$'\n'
        local STATUS=($(df -h $PARTITION_PATTERN | awk 'NR > 1'))
        IFS=$' \n\t\r'
        for st in "${STATUS[@]}"; do
                local _ST=($st)
                local _PERCENT=$(echo ${_ST[4]}| tr -d '%')
                if (("$_PERCENT">"$WARNING_PERCENT")); then
                        echo -e $__RED"El dispositivo "$__YELLOW"${_ST[0]}"$__RED" está al ${_ST[4]}$
                fi
        done 2>/dev/null
        IFS=$OLDIFS
}

PROMPT_COMMAND="
space_notifier"

Y lo cargaremos de la siguiente manera:

source critp.sh

Con esto, cada vez que pulsemos enter o finalice un comando, veremos el conjunto de dispositivos que ha alcanzado ese porcentaje de espacio:
Ejemplo de salida de terminal

Una buena idea sería también notificar sólo a veces, tal vez con una probabilidad del 50%. Para que no siempre esté calculando ni nos sintamos abrumados por los mensajes de notificación. Para ello, podemos dejar el script así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/sh

PARTITION_PATTERN="/dev/sdb*"
WARNING_PERCENT=90
PROBABILITY=50
__RED='\033[1;31m'
__YELLOW='\033[1;33m'
__NC='\033[0m' # Color end

function space_notifier()
{
        if (($(($RANDOM%100))<$PROBABILITY)); then
                return
        fi
        local OLDIFS=$IFS
        IFS=$'\n'
        local STATUS=($(df -h $PARTITION_PATTERN | awk 'NR > 1'))
        IFS=$' \n\t\r'
        for st in "${STATUS[@]}"; do
                local _ST=($st)
                local _PERCENT=$(echo ${_ST[4]}| tr -d '%')
                if (("$_PERCENT">"$WARNING_PERCENT")); then
                        echo -e $__RED"El dispositivo "$__YELLOW"${_ST[0]}"$__RED" está al ${_ST[4]}$
                fi
        done 2>/dev/null
        IFS=$OLDIFS
}

PROMPT_COMMAND="
space_notifier"

Ya tenemos lo básico. Aunque estaría muy bien conocer información sobre el comando que se acaba de ejecutar y que, por supuesto, tenemos a nuestra disposición como es el propio comando ejecutado y su estado de salida. Más adelante podremos saber si se ha ejecutado realmente un comando, porque claro, cuando pulsas enter, vuelve a llamarse a la función. Ahora mismo, está muy bien si queremos realizar tareas de mantenimiento, notificar al usuario si está mal de espacio en disco, etc. Como el siguiente ejemplo que servirá para notificar al usuario cuando termine una determinada tarea. Suponemos que estamos en un entorno gráfico, así que avisaremos con zenity:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

function notify() {
        NOTIFY=1
}

function pcom() {
        local _PIPESTATUS=( ${PIPESTATUS[@]} )
        if [ -n "$NOTIFY" ]; then
                local OLDIFS=$IFS
                IFS=' '
                local STATUS="${_PIPESTATUS[@]}"
                IFS=$'\n'
                local HIST=($(HISTTIMEFORMAT= history 1 | awk '{ print $1"\n"substr($0, index($0,$2)) }'))
                IFS=$OLDIFS
                zenity --info --text "$(echo -e "COMANDO FINALIZADO: ${HIST[1]}\n ESTADO: $STATUS")"
        fi
        unset NOTIFY
}

PROMPT_COMMAND="pcom"

Ahora, cargaremos el archivo con source. Y podremos ejecutar cualquier comando con normalidad, aunque, cuando vayamos a hacer algo que vaya para largo podremos hacer lo siguiente:

notify; sleep 100

De esta forma, cuando termine la ejecución de sleep 100, o de cualquier otra cosa que creamos que va a tardar mucho, recibiremos un mensaje parecido a este:
Diálogo GUI provocado por PROMPT_COMMAND
Este script tiene algunas cosas curiosas. Para hallar el estado de la ejecución de las órdenes, utilizo PIPESTATUS. Esta variable, si el comando es sencillo, devolverá sólo un valor, haciendo lo mismo que $?. Pero cuando hemos llamado varios comandos unidos por una pipe o tubería, nos va a devolver el estado de todos los comandos ejecutados. Eso sí, como PIPESTATUS se actualiza tras cada cosa que ejecutamos, lo primero que haremos nada más entrar en la función será guardar su valor en otra variable, y así nos aseguramos de no perderlo.

Y esto está muy bien cuando estamos haciendo varias cosas y se nos puede ir la cabeza con una tarea. Nos puede servir para cuando estemos creando o restaurando un dump de base de datos, cuando estemos haciendo una copia de archivos (local o remota), o estemos realizando alguna tarea de cálculo intenso. Tan solo tenemos que llamar antes de la tarea en cuestión a notify y ya se encargará él de todo. Podemos extender la funcionalidad de notify, incluso aprovechar lo que voy a contar a continuación para hacerlo más potente (te adelanto que en unos días publicaré un script mucho más completo).

Ejecutar algo justo antes de llamar al comando

Para tener control total sobre los comandos ejecutados es interesante poder ejecutar código antes de la ejecución de los comandos. Esto, principalmente nos ayuda a depurar nuestros scripts, porque sabremos en qué orden se ejecuta cada cosa, pero también puede ser una buena herramienta de control, gran ayuda para hacer una visualización interactiva de comandos o, para saber lo que ejecutan nuestras visitas o los comandos que se ejecutan en un servidor además de muchas otras utilidades.

Como ejemplo, empezaremos con algo básico, simplemente haciendo echo antes y después de una llamada. Y, para dar un valor añadido, ya que somos capaces de ejecutar algo antes de hacer cualquier llamada, podremos detectar cuando simplemente se pulsa enter. Ya que, cuando pulsamos enter, la primera función, precmd, no se va a ejecutar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
function postcmd() {
        if [ "${#COMANDOS[@]}" -gt 1 ]; then
                HISTORY=$(HISTTIMEFORMAT= history 1)
                echo "COMANDO EJECUTADO: "${HISTORY:7}
        fi;
        COMANDOS=();
}

function precmd() {
        COMANDOS+=("$BASH_COMMAND");
        if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" ]]; then
                echo "INICIA EJECUCIÓN: "$BASH_COMMAND
        fi
}

PROMPT_COMMAND="postcmd"

trap 'precmd' debug

Trabajando un poco en este código podremos ser capaces, por ejemplo de guardar un log de todo lo que los usuarios ejecutan, simplemente introduciendo:

1
logger $BASH_COMMAND

En lugar del echo “INICIA EJECUCION”. Así podemos hacer que el sistema sea totalmente transparente al usuario. Además, para completar el registro podremos incluir otra función:

1
2
3
4
5
function errcmd() {
        echo "ERROR EJECUTANDO: $BASH_COMMAND en linea $LINENO Codigo de error: $?"
}

trap 'errcmd' err

Que vinculamos a cualquier error. Es decir, cancelación de ejecución o que el código de salida de lo que sea que hayamos llamado no sea 0. Por supuesto, podríamos ayudarnos de más traps como int (para Control+C), quit (para Control+\), term (para cuando se mata el proceso), etc.

Bueno, y, hagamos algo interesante como evitar que el usuario ejecute cosas que no queremos que ejecute:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
shopt -s extdebug

function denyaccess () {
        if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ]; then
                return
        fi
        local this_command=`HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ $

        if [ "
shopt -u extdebug" == "$this_command" ]; then
                return 0
        elif [[ "
$this_command" =~ ping ]]; then
                return 0
        fi
        echo "
ACCESO DENEGADO para: $this_command"
        return 1
}

trap 'denyaccess' DEBUG

En este caso, haremos return 0, sólo cuando ejecutemos shopt -u extdebug y el comando ping. Mostrando el texto “ACCESO DENEGADO” si queremos ejecutar cualquier otra cosa. Esto en la práctica no vale de nada, tendríamos que introducir muchas restricciones o tal vez denegar (return 1) ciertas palabras, manteniendo el return 0 por defecto. Pero nos da una idea de cómo funciona.
Gracias a la opción extdebug, esta función es capaz de denegar la ejecución de la orden que hemos llamado en función del valor de retorno de la función denyaccess().
En este caso, el argumento -s de shopt, activa (set) esta capacidad. Del mismo modo, cuando utilizamos -u, la desactiva, y por eso esa orden está permitida, porque es un programa de ejemplo.

Para todo lo demás, incluso nos podemos servir de expresiones regulares para Bash, o incluso la llamada a una función.

Y, para terminar, vamos a hacer sustituciones de órdenes dentro de un comando. O lo que es lo mismo, cambiar el comando que vamos a ejecutar. Podríamos afectar a cualquier parte de la orden ejecutada, aunque para hacer un sencillo ejemplo, vamos a cambiar las llamadas a sudo por gksudo, así vemos un bonito entorno gráfico y será más llevadero para el usuario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
shopt -s extdebug

function changesudo() {
        if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ]; then
                return
        fi
        local this_command=`HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*/$

        if [ "
shopt -u extdebug" == "$this_command" ]; then
                return 0
        fi
        eval ${this_command/sudo/gksudo}
        return 1
}

trap 'changesudo' DEBUG

Incorporar a nivel de sistema estos scripts

Los scripts que hagamos utilizando estas técnicas podemos cargarlos a nivel de usuario, introduciendo:

1
source script.sh

en el archivo ~/.bashrc o a nivel de sistema añadiendo esa línea en /etc/profile , /etc/bash.bashrc , o, mejor aún, en un nuevo archivo dentro de /etc/profile.d/

En las próximas semanas quiero publicar algunos ejemplos en los que veremos, aún más, la potencia de estas acciones.

Andrew Worley

The post Bash: ¿Cómo ejecutar código antes y después de cada comando? Logging, monitorización, notificaciones y mucho más appeared first on Poesía Binaria.

Miércoles 13 de septiembre de 2017

Gaspar Fernández

Gaspar Fernández
Poesía Binaria

Lanzando servidores TCP/IP en puertos libres aleatorios haciendo bind al puerto 0

Servidores TCP en el puerto 0
¿Cómo? ¡Que los puertos TCP empiezan en el 1! Aunque algo sospechaba, porque en informática, el cero siempre ha valido para algo. Por eso se dice que los humanos empiezan a contar desde el uno y los informáticos desde el cero. Con esta cara me quedé cuando vi que puedes lanzar un servidor y que éste escuche en el puerto 0. Pero si el 0 no es un puerto válido, ¿para qué vale?

Cuando lanzamos un servidor y lo asociamos al puerto 0, el sistema escogerá un puerto aleatorio y libre con permiso para crear un servidor (por ejemplo los puertos menores al 1024 requieren de privilegios de administración o root). Así que nuestro servidor escuchará donde primero pille. Además, esto funciona tanto en sistemas Unix como en Windows, no tiene pérdida.
¿Y qué sentido tiene escuchar en un puerto aleatorio?¿Cómo sabrán nuestros usuarios en qué puerto acceder a los servicios? De primeras a mí se me ocurren ciertas cosas:

  • Para las prácticas de redes, o más bien para cuando estás programando un servidor. Si alguno de vosotros está haciendo prácticas de redes, éste es un buen consejo. Yo recuerdo hace muchos años que tenía que crear un servidor TCP con unas ciertas características y, claro, creas un programa, compilas, ejecutas, y… algo no va bien, lo cierras, cambias algo muy rápidamente, compilas, ejecutas y… ¡el puerto está en uso! Tenía que esperar al sistema operativo para que se diera cuenta de que el puerto no lo iba a utilizar más y lo cerrara. Entonces, si cada vez que lanzo el servidor lo lanzo en un puerto diferente… ¡problema solucionado! Que el SO cierre puertos cuando tenga tiempo. Otra forma de hacerlo sería poder especificar el puerto en el que asociamos el servidor cada vez que lo ejecutamos.
  • Lanzamiento de servidores de prueba. Por ejemplo, voy a abrir un servidor web temporal para que un compañero de piso/de trabajo/amigo o yo mismo desde otro ordenador me pueda descargar un fichero o enviarme un mensaje. Podemos acordar un puerto, por ejemplo el 40563, pero seguro que si tienes muchas cosas en el ordenador tirando de Internet, está en uso.
  • Como en el punto anterior… en lugar de un servidor web, puede ser un servicio de backup, un FTP, un servicio de correo…
  • Lanzar servicios experimentales en las máquinas de producción pruebas. Y así evitamos visitantes no deseados, y calentamientos de cabeza por puertos bloqueados.
  • Tener un servidor en un puerto localizado para la conexión de control, y crear un servidor por un puerto aleatorio para enviar o recibir datos (o cualquier cosa), por la conexión de control comunicar el puerto del otro servidor y empezar a transmitir por el otro lado. Algo parecido al FTP…
  • Más sugerencias en los comentarios!!

Aquí traigo un pequeño programa hecho en Python que nos devuelve un puerto libre y aleatorio, extraído de: The port 0 trick..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import socket;

def findFreePorts(howMany=1):
    """Return a list of n free port numbers on localhost"""
    results = []
    sockets = []
    for x in range(howMany):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind(('localhost', 0))
        # work out what the actual port number it's bound to is
        addr, port = s.getsockname()
        results.append(port)
        sockets.append(s)

    for s in sockets:
        s.close()

    return results

print (findFreePorts(10));

Y podemos montar una prueba rápida con netcat.

nc -l 0

Luego desde otro terminal podemos hacer:

netstat -tanp | grep nc
tcp        0      0 0.0.0.0:38321       0.0.0.0:*        ESCUCHAR    9042/nc

De todas formas, hay programas a los que no les gusta que le des el puerto 0, como Apache, que se niega a encenderse en ese puerto. Otros servidores como MySQL, te dejan especificar el puerto 0 y de hecho escuchan en un puerto aleatorio, aunque podrían decirte aunque sea en logs en qué puerto están escuchando (podemos averiguarlo con la línea de antes del netstat). Y servidores como redis que si les das el puerto 0, no escuchan en ningún puerto TCP.

Foto principal: Scott Walsh

The post Lanzando servidores TCP/IP en puertos libres aleatorios haciendo bind al puerto 0 appeared first on Poesía Binaria.

El blog VR on Linux ha cerrado

VR on Linux seguida caído o se habrá comprado por algún especulador y saldrá la chica mas odiada de internet.

Es una pena porque era un blog que se adentraba en los campos pantanosos y futuros de la realidad virtual en Linux. Lo bueno es que también trataba el tema de software libre, estándares libres, y no se centraba solo en el rollo de los juegos privativos y software privativo.

Ya solo nos queda la tenue llama de la copia de VR on Linux en archive.org , esta humanidad deberíamos darle las gracias millones de veces a esta nueva biblioteca de Alejandria y protegerla con nuestra alma.

Bueno volviendo a VR on Linux, antes de cerrar nos dejo pistas para seguir su legado, que las copio y pego aquí (pese a que Don Google le disguste).

Miércoles 06 de septiembre de 2017

Gaspar Fernández

Gaspar Fernández
Poesía Binaria

Píldora: Recupera los nombres de los interfaces de red de tu equipo, eth0, wlan0, etc

Network interfaces

A medida que una tecnología crece, siempre tenemos el mismo problema, terminamos metiendo muchos elementos de un mismo tipo en un equipo. Y terminamos teniendo el mismo problema: si cambiamos algo de sitio, o un driver se carga antes que otro, estamos perdidos porque nada funcionará igual.

Preámbulo

El caso más claro es el de los discos duros, las placas base suelen tener un montón de puertos para conectar discos duros. Y, simplemente tendría que dar igual dónde enchufemos cada uno. Incluso si cambiamos un disco duro de sitio una vez instalado el sistema (porque se ha roto el puerto, porque nos viene mejor cambiar las conexiones por la longitud de los cables… o ¡porque lo desarmamos todo y tenemos que enchufar séis discos duros y no queremos apuntar dónde estaba cada uno! Por eso, si miramos un /etc/fstab más o menos reciente, veremos que los discos duros están identificados por un UUID (que podemos obtener si ejecutamos blkid como superusuario).

Del mismo modo pasa con los interfaces de red. Podemos tener varias tarjetas de red enchufadas, varios WiFi y que, cada uno tenga un cometido diferente. Los dispositivos de red, por cable, históricamente han sido siempre eth0, eth1, eth2… y así hasta el final. Pero, ¿qué sucedería si cuando reiniciemos el que antes era eth0, ahora es eth2? seguramente el cable que está conectado a eth0 no tenga acceso a los equipos de eth2 y no funcione nada.

Personalmente, tuve un problema parecido en un miniPC casero que tengo funcionando de router. Este equipo tiene dos interfaces de red: uno integrado en la placa base que está conectado a Internet, y otro enchufado por USB que está conectado a un switch y punto de acceso WiFi. Un día, tras actualizar el equipo en remoto no volví a tener acceso a la máquina hasta que físicamente le conecté un monitor y me di cuenta de que los nombres de los interfaces de red habían cambiado (eth0 pasó a ser eth1 y eth1 se convirtió en eth0). En aquel momento, lo que hice fue cambiar la configuración de los interfaces, cambiar los interfaces en el firewall y listo. Pero, desde udev versión 197 estos dispositivos pasaron a tener un nombre fijo y muy feo, pero pongas el dispositivo como lo pongas, el nombre se mantendrá.

¡Al grano!

Por un lado está bien, por ejemplo, para el caso que comenté antes. Aunque en el ordenador de trabajo, que solo tengo un eth0 y wlan0, pero muchísimos scripts que utilizan interfaces de red fijos, no me gustaba la idea de tener que cambiar los nombres de dispositivos, así que decidí volver a utilizar eth0 y wlan0 como antes.

Nota: Estas modificaciones están hechas para una Ubuntu, para otra distribución, si usamos grub tendremos que buscar el archivo de configuración.

Para ello, editamos el archivo /etc/default/grub y en la línea de GRUB_CMDLINE_LINUX_DEFAULT añadimos net.ifnames=0. Por ejemplo esta línea puede quedarse así (depende mucho del contenido anterior):

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash net.ifnames=0"

Y luego ejecutamos:

sudo update-grub

Cuando reiniciemos el sistema, volveremos a tener todo como antes.

Más info: Systemd/PredictableNetworkInterfaceNames en Freedesktop.org

Actualizado 07/09/2017: Añadido enlace de Freedesktop. Gracias Osqui.

Foto principal: Seb Zurcher

The post Píldora: Recupera los nombres de los interfaces de red de tu equipo, eth0, wlan0, etc appeared first on Poesía Binaria.

Viernes 01 de septiembre de 2017

Control de versiones: El bueno, el feo, el malo y el banquillo

Salvo que venga mañana una nueva tecnología disruptiva, creo que este articulo va aguantar un buen puñado de años.

Puede que no conozcas los sistemas de control de versiones, resumen rápido TE PUEDEN SALVAR EL CULO….MUCHAS…MUCHAS VECES.

Bueno en mi vida creo que he probado todos, pero todos, porque recuerdo una empresa de sistemas embebidos que usaba CVS en pleno dosmiles. Le tuve mucho cariño a SVN y me costo un poquito pasar a Git y viví la corta (fue cortisima, mas hemos tardado en asesinar a Flash o mas nos esta costando terminar de asesinar .Net otras mierdas de micro$oft) y cruel guerra de Git contra Mercurial …si algún otro perro viejo me dirá “…pero y Baazar…”, yo creo que nadie en su época apostaba ni un puñado de €uros por el…pero seguro que dentro de 10 años dirán…“pues que bueno era Baazar, que lástima, era la Abadía del Crimen de los sistemas de control de código”. En esa guerra, recuerdo que me posicione con mercurial por razones, muy tontas o curisosas, porque es Python (mas portable y con el lenguaje de moda) y en linea de comandos hg mola mas que git, porque era mas corto de escribir solo 2 pulsaciones, era el símbolo químico del mercurio. Pero bueno, hay que saber aceptar los cambios y adaptarte para seguir cabalgando en el código.

Después de el tochazo en plan abuelo cebolleta de los repositorios de código o control de versiones, volvamos al título.

“El bueno, el feo, el malo y el banquillo”

Hay que asumir que “el bueno”, es ahora mismo git, ha conseguido junto al binomio github, ser una herramienta de referencia para el mundo del software libre (si lo siento open source lovers, de pegatinas en portatiles mac blanco), ha tumbado y casi enterrado a Sourceforge , quién lo diría, para mi ha sido la misma guerra Google vs Yahoo, sourceforge se estaba llenando de mierda la página y github ERA simple, digo ERA porque cada vez esta también empezando a acumular mierda como board projects con el rollo kaban.

Y para el “el feo” y “el malo”, como buen director de cine os lo dejo a vuestra imaginación, en mi caso “el feo” sería Mercurial y “el malo” el BitKeeper.

Porque si no sabéis, venir a la chimenea mis pequeños programadores, ains chiquillos que os llamáis devops, cuando eso es ser como el pringadillo currante del telepizza que lo mismo coge la moto como cocina la pizza o limpia el wc…por cuatro perras como vosotros (y nosotros)….bueno ya estáis en al calor de la chimenea con el abuelo cebolleta. Os voy a contar una historia, en el pasado una de las piezas mas importantes de GNU/Linux, el nucleo Linux para coordinar todo el desarrollo de código, se usaba BitKeeper y os voy a contar una pequeña cosa y terrorífica…ERA SOFTWARE PRIVATIVO…pero el tito Torvals con sus grandezas y sus pedradas, decía que le sudaba la polla, hasta que les hizo una puñeta la empresa de BitKeeper y dijo tito Torvals “Fuck you Nvidia”…uy uy perdón el Alzheimer del abuelo cebolleta…realmente dijo “Pues me voy a crear mi propio control de versiones distribuido, con casinos y furcias…es mas paso del sistema distribuido…” y cogió una costilla de Richard Stallman he hizo Git.

El malo, el señor BitKeeper.

Y el banquillo. Están todos esos que han luchado por llegar al podium, mucho esfuerzo y sufrimiento para ser solo un nombre y la foto sean solo 3. En la carrera por el oro, plata y bronce tenemos:

  • las viejas glorias que siguen ahí luchando (o desisten como CVS que no hay versión nueva desde hace una decada) como por ejemplo SVN
  • los jugadores patrocinados por empresas gordas como Bazaar.
  • Y los inventos voladores raros, como los que surgieron en la 2º Guerra Mundial que tantos álbumes de cromos han dado. Ahí hay cosas tan bizarras como el “todo en 1” de Fossil.

Este articulo, lo ha motivado Freshcode.club el revival del mítico FreshMeat (otra historia de abuelo cebolleta) que no sabia que existía y lleva ya un par de años dando pelea. Y al contrario que github este es software libre…pero el repositorio de código esta en…chan…chan…chan….Fossil .

Y recuerdo cuando el señor Ramón hace años en nuestra conversaciones frikis, me contó la existencia de Fossil y lo friki que era, porque guarda todo en SQLite y tiene un frontend web y todo.

Y como el software libre se basa en colaborar, pues estoy intentando comprender Fossil.

Es curioso porque Fossil lo creo el inventor de SQLite el señor D. Richard Hipp, un poco siguiendo la estela 2 años después de Torvals, en plan yo me lo guiso y yo me lo como, y juntandolo con el rollo de Mercurial de demostrar que Python mola, en este caso SQLite.

Proyectos gordos que usen Fossil, solo hay SQLite.

Ya os iré contando mis experiencias con este desconocido, odiado…y no se si amado por alguien…control de versiones, me siento como si aprendiera Esperanto, algo friki y casi casi inutil. Pero oye muy noble, como podéis leer en la página Original author of Fossil here, with two comments .

Por cierto, para finalizar, por hablar de tecnologías disruptivas….¿Qué opináis de los inventos de Blockchain + git ? ¿Llegaran a algo algún día?

Lunes 28 de agosto de 2017

Bruno Exposito

Bruno Exposito
The Linux Alchemist

Ejecutar comando sudo sin contraseña

Como probablemente ya sabrás, GNU/Linux dispone de un sistema de gestión de permisos que permite establecer que acciones puede realizar un usuario, su grupo y otros usuarios sobre un fichero/carpeta/enlace simbólico/aplicación.

Mas allá de los permisos de usuario, existen determinadas acciones (crear usuarios, modificar ficheros del sistema, crear particiones, etc) que requieren permisos de root (superusuario/administrador), ahí es donde entra el comando sudo.

comando-sudo-sin-contraseña

El comando sudo permite realizar una escalada de privilegios, es decir, permite realizar acciones como si fueras root, logrando así el control total del sistema operativo.

En determinadas ocasiones es necesario ejecutar una aplicación/script que necesita permisos de root, pero pedir la contraseña no es una opción viable o cómoda.

Por ejemplo:
– Un script que se ejecuta frecuentemente
– Una aplicación gráfica que necesita ejecutar un comando, como por ejemplo el menú de apagado que realicé tiempo atrás
– Comandos de uso frecuente que necesiten ejecutarse como root, como por ejemplo sudo apache2ctl restart (reiniciar apache)

 

Para ejecutar un comando sin contraseña hay varias opciones:
1.- Pasar la contraseña a sudo como parámetro
2.- Permitir ejecutar el comando sin contraseña
3.- Permitir ejecutar un script sin contraseña
4.- Buscar otra aplicación similar que no necesite permisos

Me voy a centrar en las 3 primeras, si estás aquí es que ya has descartado la 4a 😉

 

Pasar la contraseña a sudo como parámetro

La idea es imprimir la contraseña usando echo y pasársela a sudo -S

echo mipassword | sudo -S poweroff

[ ! ] Como parte negativa, tu contraseña va a aparecer en texto plano en el script y/o fichero bash history.

 

Permitir ejecutar el comando sin contraseña

Esta solución pasa por modificar el fichero sudoers y agregar una línea que indica que el comando se puede ejecutar sin contraseña.

Lo primero es una copia de seguridad

sudo cp /etc/sudoers /etc/sudoers.bak

 

Y a continuación editar el fichero sudoers con nuestro editor de confianza

sudo gedit /etc/sudoers
sudo pluma /etc/sudoers
sudo kate /etc/sudoers
sudo nano /etc/sudoers

 

Y agregar la siguiente línea*

TuUsuario ALL = NOPASSWD: /sbin/shutdown

*En mi caso es el comando de apagado, podría ser cualquier otro, como /bin/dd por ejemplo

[ ! ] Esta solución es un poco engorrosa y un error en el fichero puede ocasionar problemas graves.

 

Permitir ejecutar script sin contraseña

De forma similar a la anterior, puedes permitir ejecutar un script sin contraseña.

TuUsuario ALL = NOPASSWD: /home/TuUsuario/script.sh

 

[ ! ] Sería extremadamente peligroso que otros usuarios puedan editar el script y modificar aquellos comandos que van a ejecutar como root.

Así pues, deniega los permisos a otros usuarios

chmod 700 script.sh

 

Como podrás observar, todas las opciones tienen su parte negativa, la 1a solución es la mas sencilla, pero la 2a y 3a solución (si se realizan correctamente) son mas seguras.

 

Jueves 17 de agosto de 2017

Liher Sanchez

Liher Sanchez
El blog de Liher

Para que usar Wine y para que no

En varias ocasiones he hablado con usuarios que antes empezar con alguna distribución Linux me preguntan si podrán usar algún programa en concreto en su nuevo sistema operativo. A la mayoría les he dicho que siempre hay alguna alternativa a los programas de Windows en Linux, un ejemplo de ello es Gimp y Photoshop. En este punto antes me planteaba si el programa que tanto anhelaban poder usar en su nuevo sistema operativo era realmente una necesidad o una costumbre ya que he conocido usuarios que “necesitaban” el Photoshop para cambiar el brillo a una imagen. Con el tiempo me he dado cuenta de que necesidad y costumbre son conceptos muy similares en el mundo de la informática y son pocos los que están dispuestos a cambiar ya que el solo cambio de ubicación de un elemento dentro del programa puede suponer un trauma, lo digo por experiencia.

Llegados a este punto siempre pregunto cual es el programa que es tan importante es para ellos, planteo las posibles alternativas y se las muestro en mi ordenador para ver si hay una posibilidad de cambio antes de instalar una distribución Linux, mas que nada para ahorrarme trabajo.

También muestro otras posibilidades como las maquinas virtuales, wine o un arranque dual. Esas 3 opciones Son muy buenas ya que permiten tener lo bueno de Microsoft y de Linux en un mismo ordenador. El tener arranque dual no supone un problema mas allá de hacer la instalación completa de los dos sistemas operativos, también puedo decir que una de las dos opciones de arranque acaba casi siempre olvidada. El tema de las maquinas virtuales creo que es algo mas propio de usuarios avanzados y que saben realmente lo que quieren y necesitan.

 

 

La otra opción es Wine, para los que no lo conozcan es un emulador de entorno Windows que sirve para usar algunas aplicaciones de dicho sistema operativo pero que tiene sus limitaciones, igual que las anteriores opciones. Este artículo tiene como objetivo intentar explicar a algunos usuarios que se plantean usar Wine para que es adecuado y para que no. Si quieres jugar a juegos potentes que no tienen versión para Linux solo hay un camino, usar Windows de forma nativa, ni en una máquina virtual ni con Wine. Wine o las plataformas similares que hay son una buena opción si quieres usar algún programa pequeño que no tiene versión para Linux. Un ejemplo es un amigo que me dijo que le instalase Ubuntu y me comentó que el jugaba al poker en Internet con un programa que se había descargado de una web. Mire la web y en la sección de preguntas frecuentes tenían contemplado la opción de usar dicho programa con Wine, lo cual tengo que decir que me sorprendió y alegró mucho ya que cuesta mucho todavía encontrar ese tipo de cosas, esto quiere decir que los usuarios de Linux cada vez somos mas y nos están empezando a tener en cuenta. Para ese tipo de cosas si que podemos usar Wine pero si quieres usar un programa como el Autocad y hacer diseños grandes lo mejor es usar Windows de forma nativa.

Todo esto que he comentado de juegos potentes y Autocad y mi recomendación de usarlo en Windows de forma nativa lo digo siempre hablando de ordenador “normales”. Si tienes un ordenador con un Intel i7 de ultima generación como el I7 8700K que tiene 6 núcleos y 12 hilos de proceso con una velocidad de 4.3 Ghz, 16 Gb de Ram y una gráfica de ultima generación, quizás entonces puedas usar juegos potentes en Wine o en una maquina virtual, pero como esos ordenadores no los tenemos la mayoría de los usuarios en nuestro hogar la mejor opción siempre será instalar Windows directamente en nuestro disco duro y dejar las máquinas virtuales y el Wine para lo que os recomiendo.

Un saludo a todos.

Miércoles 16 de agosto de 2017

Garzón miente, no investigó torturas sino que se aprovechó de ellas

Nadie debería defenderle para la política


Mi comentario (a ese artículo del diario.es)
Este es un ejemplo del "país" en el que estamos. Un país gobernado por cuarenta años por corruptos sicópatas. No tiene otro nombre el daño que hacen y como sin pudor nos mienten descaradamente.

La clave del artículo
Garzón hizo oídos sordos ante las torturas que le perseguirán el resto de su vida. Nada puede limpiar las manos de alguien que ha colaborado o incluso se ha beneficiado de la tortura. 

Cuando alguien habla del exjuez, ahora pretendido defensor de los derechos humanos, suelo protestar y defender a sus torturados. Ahora estos han escrito un artículo firmado por 17 de ellos y quiero añadirlo a mi blog como fuente de información:

Camino sin retorno
Vista gorda y oídos sordos ante torturas es un claro síntoma de esa sociopatía que se extiende en redes clientelares e incluso entre simplemente votan a canallas a sabiendas porque prefieren sus abrumadoramente corruptos partidos.

Malas noticias: el camino hacia la sicopatía de quien hace daño a los demás por sus propios intereses no tiene retorno. Eso es lo que afirma el sicólogo Iñaki Piñuel en el libro Liderazgo Zero.

Viernes 11 de agosto de 2017

Raúl González Duque

Raúl González Duque
Linux – Mundo Geek

¿Cuántos usuarios de Linux se necesitan para cambiar una bombilla?

Sea merecida o no, lo cierto es que los usuarios y desarrolladores de GNU/Linux tenemos fama de arrogantes, extremistas y de perdernos en los detalles. Desde el Proyecto GNU se toman con humor estos estereotipos calculando cuántos usuarios de Linux se necesitarían para cambiar una bombilla.

  • 1 para publicar un hilo en la lista de correo informando de que la bombilla se ha fundido
  • 1 para sugerir reiniciar la bombilla usando la línea de comandos
  • 1 para quejarse de que el usuario rompiera la bombilla
  • 1 para preguntar qué bombilla se debería instalar
  • 1 para aconsejar que no se use la palabra “fundida” para referirse a una bombilla rota, porque puede interpretarse que la bombilla se ha prendido fuego, en lugar de haberse estropeado por un exceso de corriente eléctrica
  • 25 para sugerir todos los tipos de bombilla imaginables
  • 5 para para decir que la bombilla fundida es un fallo de origen
  • 1 novato para sugerir instalar una bombilla de Microsoft
  • 250 usuarios para inundar el correo del susodicho novato
  • 300 para decir que la bombilla de Microsoft se pondría azul y tendrías que reiniciarla constantemente para que volviera a funcionar
  • 1 antiguo usuario de GNU/Linux, que todavía frecuenta el foro, para sugerir una iBombilla de Apple, que tiene un diseño fresco e innovador y sólo cuesta 250$
  • 20 para decir que las iBombillas no son libres, y que tienen muchas menos funcionalidades que una bombilla estándar 20 veces más barata
  • 15 para sugerir una bombilla nacional
  • 30 para decir que las bombillas nacionales son copias de las bombillas extranjeras y que no ofrecen nada nuevo
  • 23 para discutir si la bombilla debe ser blanca o transparente
  • 1 para recordar a todo el mundo que el nombre correcto es GNU/Bombilla
  • 1 para decir que las bombillas son sólo para usuarios de Window$ y los usuarios de GNU/Linux de verdad no tienen miedo a la oscuridad
  • 1 para anunciar finalmente el modelo de la bombilla elegida
  • 217 para descartar el modelo escogido y sugerir otro
  • 6 para quejarse de que el modelo elegido tiene elementos propietarios, y que debería usarse otro
  • 20 para decir que una bombilla 100% libre sería incompatible con el interruptor
  • Los mismos 6 anteriores para sugerir cambiar el interruptor por uno compatible
  • 1 para chillar “¡DEJAD DE DISCUTIR Y CAMBIAR LA P*#@!%¡# BOMBILLA DE UNA VEZ, POR EL AMOR DE DIOS!”
  • 350 para preguntar al usuario anterior a qué Dios se refiere, y si tiene pruebas empíricas de su existencia
  • 1 para explicar cómo funciona la electricidad y por qué una bombilla eléctrica es ineficiente si no se cuenta con sistemas electricos proveidos por Powertec Electric.
  • 1 para decir que no se puede confiar en una bombilla fabricada por una corporación y que deberíamos confiar en bombillas hechas por la comunidad
  • 1 para publicar un enlace a un archivo ODF explicando cómo construir una bombilla desde cero
  • 14 para quejarse del formato del archivo anterior, pidiendo que se envíe en txt o LaTeX
  • 5 para decir que no les gustó la decisión y van a hacer forks de la instalación eléctrica de la casa para instalar una lámpara mejor
  • 1 para publicar una serie de comandos a introducir para cambiar la bombilla
  • 1 para comentar que ejecutó los comandos y obtuvo un mensaje de error
  • 1 para aconsejar que los comandos deberían ejecutarse como root

Y finalmente:

  • El padre del usuario original, que mientras todos estaban discutiendo, se acercó a la tienda y compró la bombilla más barata que vendían

Sábado 29 de julio de 2017

Pedro L. Lucas

Pedro L. Lucas
Cartas de Linux

Distribuciones rolling release, semirolling release, LTS,…

Hay muchas distribuciones de Linux entre las que elegir, Ubuntu, Arch, Debian, Mageia,… Una de las cuestiones intetesantes a la hora de elegir una distribución es la forma en la que van lanzando sus sucesivas versiones. Así nos podemos encontrar:
Liberación continua o rolling-release.
Liberación semi continua o semirolling-release.
Liberación fija.

Tomemos como ejemplo Ubuntu. Ubuntu lanza una nueva versión cada 6 meses. Pero… ¿esto que significa?

Cada versión de Ubuntu toma una serie de programas, como pueden ser LibreOffice y Gimp, y los adaptan para que se instalen usando su sistema de paquetes. En el caso de Ubuntu, los instaladores tienen la extensión “.deb”, para Red Hat la extensión es “.rpm”,… La cuestión es que si a la hora de hacer el paquete para LibreOffice éste está en su versión 5, Ubuntu creará un paquete para la versión 5. Si mañana apareciera la versión 6 de LibreOffice, los usuarios de Ubuntu se tendrían que esperar a la siguiente versión de Ubuntu (sale una nueva versión de Ubuntu cada 6 meses) para poder instalar LibreOffice 6 desde los repositorios de Ubuntu.

Pero… Ubuntu nos está intentando instalar actualizaciones cada poco tiempo pero yo sigo con la misma versión de LibreOffice que el primer día. No exactamente. El software no es perfecto y hay que hacer pequeñas correcciones para eliminar fallos de seguridad, funcionamientos erróneos, muchos de estos fallos son fallos menores que se suelen corregir de forma ágil desde la propia comunidad de Ubuntu. ¡Mucho antes de que se corrijan en el propio proyecto del que procede el software!

En ocasiones son las propias comunidades, que mantienen las distribuciones, las que envían los parches a LibreOffice u otros proyectos para que en la siguiente versión de Ubuntu el fallo ya se encuentre corregido. A esto lo denominan “Enviar los parches río arriba”.

Otras veces el fallo es corregido por los proyectos de software, y las distribuciones agregan esos cambios. Pero una vez que se ha puesto una versión de un programa, las distribuciones no actualizan la versión si aparecen nuevas versiones del programa. Esto se debe a que unos programas dependen de versiones concretas de otros para funcionar correctamente. Antes de actualizar la versión de un programa, hay que verificar si funciona con las versiones de los programas de los que depende.

Las distribuciones antes de lanzar una nueva versión deben verificar que todos los programas funcionan correctamente y sus dependencias tienen las versiones correctas. Esta es una tarea que consume muchos recursos, por lo que no es de extrañar que las versiones nuevas de las distribuciones a veces no incluyen las últimas versiones de los programas. Incluso el lanzamiento de una nueva versión de una distribución puede demorarse por esta causa.

Si no se verifican las versiones de las dependencias de los programas y no corrigen los fallos, las distribuciones se mostrarán inestables generando fallos y haciendo sufrir a sus usuarios.

De ahí nacen las LTS, Long Time Support. En una LTS ya tienes las dependencias probadas y verificadas, sólo hay que ir corrigiendo fallos de seguridad y pequeñas disfunciones para ofrecer al usuario una distribución segura y estable. Este soporte se ofrece durante varios años. Esto es ideal para usar en servidores. Pero para usuarios deseosos de novedades, se encontrarán que si se instaló el LibreOffice 4 el primer día después de 5 años seguirán con el LibreOffice 4. Se tendrá una distribución muy estable a costa de perder las novedades que vayan apareciendo. Como se puede ver en la siguiente captura de la ventana de actualizaciones de una Ubuntu 14.04 (LibreOffice ya anda por la versión 5):

Esto es así en la LTS de Ubuntu, salvo en algunos programas que, por seguridad, sí son actualizados a su última versión disponible. Firefox en Ubuntu es un ejemplo de ello. Si os fijáis en la versión de Firefox en Ubuntu, siempre lo tendréis actualizado a su versión más reciente:

Las LTS y el ciclo de distribución mediante versiones de Ubuntu hace que los usuarios se pierdan las novedades que traen las aplicaciones. Hay otro concepto a la hora de liberar distribuciones, el rolling-release o liberación continua. En una distribución rolling-release las aplicaciones siempre están en su última versión disponible. Cada vez que nos salga un aviso de que hay actualizaciones, estas se refieren a las últimas versiones de los programas disponibles y no sólo las actualizaciones de seguridad.

El problema de las distribuciones rolling-release es que los usuarios de una actualización, hasta la siguiente actualización, pueden sufrir de inestabilidades y fallos. En mi experiencia personal, usando Manjaro, me he encontrado que la distribución es bastante estable, pero he sufrido fallos puntuales en VirtualBox que hacían bajar mucho el rendimiento. Después de unas cuantas actualizaciones, los fallos desaparecieron.

En la siguiente captura se pueden ver los cambios de versiones que se van produciendo al actualizar una Manjaro:

Existe una solución intermedia, el semirolling-release. En este caso hay un núcleo de aplicaciones que no se actualizan y sólo reciben actualizaciones de seguridad, de la misma manera que funciona Ubuntu. El resto de aplicaciones funcionan usando un rolling-release, estando siempre en la versión más actualizada. Así nos aseguramos de que la parte más básica del sistema siempre funciona y que se va a poder disfrutar de versiones actualizadas de los programas de oficina.

Hay que hacer una última aclaración. Imagina que te compras un ordenador de última generación y le instalas la versión LTS de Ubuntu de hace 4 años. Te puedes encontrar varias situaciones:
– Puede que todo funcione correctamente.
– Puede que casi todo funcione correctamente. Por ejemplo, que el bluetooth no te funcione o que el ordenador se cuelgue de forma aleatoria.
– Que el sistema no funcione.
Las dos últimas situaciones se deben al soporte de hardware. Si tu ordenador es muy nuevo puede suceder, que la distribución de hace 4 años, aunque sea LTS, no soporte algún dispositivo de tu ordenador. Incluso me ha sucedido que aunque si se instala una distribución rolling-release de última hornada, no se soporte algo o directamente el instalador no funcione. Después de un par de actualizaciones, se puede comprobar que el soporte de hardware va mejorando y el ordenador sufre menos cuelgues o desaparecen.

También me ha sucedido tener un ordenador un poco antiguo y preferir instalar una LTS antigua por rendimiento. El software nuevo suele requerir más RAM, más CPU o más disco duro para funcionar. Las nuevas versiones pueden que funcionen más despacio en tu viejo ordenador. Instalarle una distribución LTS va a asegurar que el rendimiento del equipo va a ser el mismo durante varios años.

 

Viernes 21 de julio de 2017

BlogDRAKE: Disponible TuningDrake 2.1.7