Planeta Sysadmin

de sysadmins para sysadmins

October 20, 2017

enavas.blogspot.com.es

Instalar Libreoffice Fresh o Libreoffice Still

Si queréis mantener más o menos actualizado LibreOffice en Ubuntu, podéis utilizar su ppa: https://launchpad.net/~libreoffice/+archive/ubuntu/ppa

Allí encontraréis las diferentes versiones que distibuyen vía ppa. En particular, podemos distinguir dos: 
  • Libreoffice Fresh: La última versión disponible.
  • Libreoffice Still: La versión considerada como estable.
Si queréis instalar la última versión disponible, tan sólo tendréis que ejecutar el siguiente comando para añadir su repositorio:
# add-apt-repository ppa:libreoffice/ppa
Ahora bien, si queréis instalar la versión estable, tendréis que echar un vistazo a la página del repositorio https://launchpad.net/~libreoffice/+archive/ubuntu/ppa para ver cuál ese la estable en ese momento. Por ejemplo, la estable (still) a día de hoy es la 5.3:


Eso quiere decir que, si queremos disponer de la versión estable en este momento, deberíamos añadir el repositorio correspondiente a la versión 5.3:
# add-apt-repository ppa:libreoffice/libreoffice-5-3
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at October 20, 2017 03:20 PM

Mantener actualizados los drivers NVIDIA de SIATIC e Infolab

Para mantener actualizados los drivers NVIDIA de SIATIC e Infolab utilizo un módulo puppet que instala los paquetes:
  • nvidia-340 en SIATIC.
  • nvidia-384 en Infolab.
Los SIATIC tienen una GeForce 210:
# lspci | grep -i vga
01:00.0 VGA compatible controller: NVIDIA Corporation GT218 [GeForce 210] (rev a2)
Los Infolab tienen una GeForce GT 730:
# lspci | grep -i vga
01:00.0 VGA compatible controller: NVIDIA Corporation GK208 [GeForce GT 730] (rev a1)
La instalación se realiza vía ppa desde aquí:

El módulo es muy sencillo, pero no lo he compartido para evitarme quebraderos de cabeza básicamente por tres razones:
  • Se apoya en el módulo puppetlabs/apt de puppetforge, que casi nadie usará en su centro.
  • Mis máquinas tienen actualizado el kernel a la versión 4.
  • No utilizo repositorios congelados.
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at October 20, 2017 11:57 AM

Paquete pkgsync 1.41

He actualizado el paquete pkgsync a la versión 1.41 para evitar que la herramienta purge-old-kernels pida confirmación a la hora de eliminar kernels antiguos.
    Aquí podéis ver el código completo de pkgsync:


    Y si queréis descargar el paquete que instala esta versión de pkgsync, aquí lo tenéis:
    https://drive.google.com/file/d/0B3XAklnKX7ZjTk5wVzVtdkk4WFE/view?usp=sharing
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 20, 2017 11:30 AM

    October 19, 2017

    enavas.blogspot.com.es

    cmder: Emulador de consola portable para Windows

    cmder es un emulador de consola portable para Windows que nos va a permitir realizar conexiones a nuestras máquinas Linux desde Windows de una forma muy cómoda, y, sobre todo muy similar a la consola de Linux.


    La ventaja de que sea portable es que podemos utilizarlo en máquinas en las que no tenemos permisos de instalación y llevarla con nosotros en nuestros dispositivos de almacenamiento.

    Se encuentra disponible en dos versiones:
    • Una versión mini que ocupa unos 6 Mb.
    • Una versión full que ocupa unos 84 Mb.
    A continuación podéis ver una imagen de la consola recién abierta:


    Y realizando una conexión a una máquina virtual:



    Una característica muy interesante de esta herramienta es que nos va a permitir abrir diferentes sesiones y cambiar entre ellas, algo muy útil cuando iniciamos sesiones en varias máquinas remotas.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 19, 2017 03:06 PM

    October 18, 2017

    enavas.blogspot.com.es

    Instalar ScanGear para escanear en impresoras multifunción PIXMA MG5700 Series

    Del mismo modo que instalamos los drivers para imprimir en impresoras PIXMA de la serie MG5700, podemos instalar el software Scangear, que nos va a permitir utilizar el escaner en Ubuntu.

    A continuación os dejo el enlace de descarga desde Canon Asia porque desde canon.es os dirá que nuestro dispositivo ya no es compatible con Linux... Ya véis. Ni ellos mismos saben si tienen soporte o no, porque en la web de soporte de Canon Asia sí existen:
    http://support-th.canon-asia.com/contents/TH/EN/0100840201.html

    Una vez descargado el paquete con los drivers, lo descomprimimos:
    # tar xfvz scangearmp2-3.40-1-deb.tar.gz
    Al descomprimirlo nos crea un directorio. Entramos dentro de él: cd scangearmp2-3.40-1-deb/
    Y ejecutamos el script install.sh para que instale los drivers de 32 o 64 bits en función del sistema operativo que tengamos: ./install.sh
    Y listo.

    Una vez instalado el software, encendemos el dispositivo, abrimos un terminal y ejecutamos:
    # scangearmp2
    La primera vez nos dirá que no se encuentra ningún dispositivo disponible:


    Hacemos clic sobre el botón "OK" y nos aparecerá una ventana como la siguiente:


    Hacemos clic en "Update Scanner List" para que la aplicación detecte el escaner. Una vez detectado, nos mostrará una pantalla en la que podemos comprobar que lo ha detectado:


    Pulsamos "OK" y tendremos acceso a la aplicación de escaneado:


    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 18, 2017 02:52 PM

    Instalar IJ Printer Driver para impresoras Canon PIXMA MG5700 Series en Ubuntu

    La serie PIXMA MG5700 consta de 5 modelos concretos de impresoras:
    • PIXMA MG5740
    • PIXMA MG5750
    • PIXMA MG5751
    • PIXMA MG5752
    • PIXMA MG5753
    Podemos descargar e instalar los drivers de estos 5 modelos, descargando el siguiente paquete desde la web de soporte de Canon Asia:
    http://support-th.canon-asia.com/contents/TH/EN/0100839901.html

    Una vez descargado, lo descomprimimos:
    # tar xfvz cnijfilter2-5.40-1-deb.tar.gz
    Entramos dentro del directorio:
    # cd cnijfilter2-5.40-1-deb
    E instalamos:
    # ./install.sh

    Tan sóilo he probado el paquete en Ubuntu. En Debian debería funcionar del mismo modo.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 18, 2017 12:12 PM

    Realizar un test de velocidad desde el terminal

    Cuando necesitéis realizar un test de velocidad desde un terminal, como por ejemplo, desde un servidor donde no hay entorno gráfico, podéis recurrir a una herramienta como speedtest-cli.

    speedtest-cli es un script escrito en python que podemos descargar directamente en la máquina que lo vamos a usar:
    # wget -O /usr/local/bin/speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
    Una vez descargado, damos permisos de ejecución:
    # chmod +x /usr/local/bin/speedtest-cli
    Y ya podremos usarlo:
    # speedtest-cli
    Retrieving speedtest.net configuration...
    Testing from Telefonica de Espana Static IP (79.156.18.115)...
    Retrieving speedtest.net server list...
    Selecting best server based on ping...
    Hosted by Antisa Telecom (Alange) [145.42 km]: 238.331 ms
    Testing download speed................................................................................
    Download: 0.82 Mbit/s
    Testing upload speed................................................................................................
    Upload: 0.42 Mbit/s
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 18, 2017 11:46 AM

    October 16, 2017

    enavas.blogspot.com.es

    rEFInd: Cambiar el icono de un bootloader

    Ahora que en los equipos de Infolab tenemos dos instalaciones de Windows (una en el primer disco duro y otra en el segundo), se hacía necesario distinguirlas. Ésto es algo sencillo de hacer. Tan sólo tenemos que colocar un archivo de imagen .png de 128x128 pixeles en la partición EFI del disco duro en cuestión.


    Es importante decir que el archivo con la imagen debe tener el nombre .VolumeImage.png

    Para copiar este archivo a todas las máquinas, he utilizado tmux-cssh. Simplemente lo he subido a uno de mis servidores apache y, una vez encendidos los equipos, he establecido una conexión multiplexada con todos ellos.

    Una vez establecida la conexión, lo único que he tenido que hacer ha sido montar la partición EFI, descargar el archivo en dicha partición y desmontar.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 16, 2017 12:17 PM

    October 12, 2017

    enavas.blogspot.com.es

    Escritorio de mi portablet Vexia

    He modificado el aspecto del escritorio de mi portablet Vexia, y le he añadido las extensiones de Gnome que me permiten trabajar más cómodamente junto con el dock plank:


    Con Gnome Shell, al pulsar la tecla Windows, podemos ver todas las ventanas que tenemos abiertas para cambiar de aplicación, cambiar de escritorio, abrir una de las aplicaciones del dock...


    O buscar una aplicación comenzando a escribir su nombre:


    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 12, 2017 05:05 AM

    Seleccionar dispositivo de arranque en Portablet Vexia Core M

    Los portables Vexia Core M disponen de un sistema UEFI. Para acceder a las opciones de configuración, encendemos el portablet e inmediatamente pulsamos la tecla ESC repetidas veces. Cuando el equipo detecte la pulsación de esta tecla nos mostrará un menú como el siguiente:
    Donde podremos ver y modificar opciones de configuración del dispositivo. Una de ellas es el orden de arranque de dispositivos.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 12, 2017 04:51 AM

    October 11, 2017

    debianhackers.net

    Mañana empieza el HackMeeting 2017

    Aunque se le ha dado bombo y platillo en las redes libres (y en las no tan libres), no quería dejar de recordaros que mañana empieza el HackMeeting 2017: Ingoberhack en La Ingobernable, un escenario inmejorable para compartir y construir conocimiento abierto.

    Empieza fuerte, con nodos prácticos sobre cifrado de datos, análisis de big data para controlar las corruptelas de la clase política y fabricación colaborativa; y otros algo más filosóficos como la propuesta de trasladar la GPL a objetos físicos. Y el patrón se mantiene a lo largo de los cuatro días con talleres y charlas sobre temas tan diversos como feminismo, criptomoneda, procomún, censura en la red o defensa de la privacidad, por mencionar algunos. Os dejo captura del calendario de nodos, os aseguro que no tiene desperdicio:

    Haz click para ver el pase de diapositivas.

    El calendario es provisional, podéis ver los cambios en tiempo real aquí. Y los detalles sobre el contenido de cada nodo aquí.

    Cambio y corto, pero no sin antes agradecer el currazo de las buenas gentes que han invertido tiempo, sudor y ganas, muchas ganas en organizar el evento.

    ¡Nos vemos mañana!

    by Debish at October 11, 2017 06:37 PM

    enavas.blogspot.com.es

    Crear un pendrive de arranque rEFInd para recuperar el arranque EFI de nuestros equipos

    Ya hemos visto como en muchas ocasiones, nuestro querido Windows tiene a bien cargarse el arranque dual Ubuntu/Windows y ponerse él solito como sistema operativo por defecto. Debido este comportamiento tan sociable, que tenemos que agradecer a Microsoft, resulta imprescindible tener alguna herramienta para reestablecer el arranque dual.

    Muchos administradores usan Boot Repair Disk, pero para mí, personalmente, es mucho más cómodo utilizar rEFInd para arrancar Ubuntu y, en mi caso, reinstalar rEFInd con tan sólo ejecutar refind-install (Quien use grub, utilizará grub-update). La principal ventaja de rEFInd es que va a detectar todos los dispositivos instalados y me va a permitir arrancar cualquiera de ellos.

    Crear un pendrive de arranque rEFInd es trivial si usamos Etcher:

    Tan sólo tendremos que descargar la imagen USB de rEFInd desde el siguiente enlace:


    Es un archivo zip que tendremos que descomprimir una vez descargado. 

    Una vez descomprimido, tendremos una carpeta con el siguiente contenido:

    Todos los archivos son de texto, excepto el que contiene la imagen .img

    Para grabar la imagen de rEFInd en nuestro dispositivo, vamos a usar Etcher. Así que abrimos la aplicación:


    Una vez abierta, seleccionamos la imagen de rEFInd:


    Ésta es la última versión disponible a día de hoy. Una vez seleccionada, Etcher seleccionará el dispositivo que hayamos introducido y que él ha detectado. Si no es el correcto, podemos cambiarlo haciendo clic sobre "Change".


    Una vez seleccionada la imagen y el dispositivo de destino, tan sólo nos queda pulsar el botón "Flash" para grabarla en él. Cuando termine, nos informará de que el proceso ha sido completado:


    Y listo.

    Ahora bien, como podréis comprobar, rEFInd, ocupa muy poquito espacio y si lo montamos en un dispositivo de almacenamiento grande, estaríamos desaprovechando el espacio libre que queda como "no asignado":


    Lo que yo suelo hacer es crear una partición en el espacio libre que podré usar para almacenar datos.

    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 11, 2017 10:22 AM

    Etcher: Una excelente herramienta para grabar imágenes iso, img, etc... en dispositivos USB o tarjetas SD

    Etcher es una herramienta gráfica opensource y multiplataforma (disponible para Linux, Windows y Mac) que nos va a permitir grabar imágenes img, iso, zip, etc... en dispositivos USB o tarjetas SD de forma muy sencilla.


    La versión para linux no require instalación. Simplemente hacéis doble clic sobre la aplicación y se abrirá.

    La versión para windows dispone de versión de instalación y portable, tanto para 32 como 64 bits.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 11, 2017 09:16 AM

    Tecla para elegir el dispositivo de arranque en portátiles Xtrem NG-111

    Para elegir el dispositivo de arranque en portátiles Xtrem NG-111 debemos pulsar la tecla Esc


    Ya podían ponerse de acuerdo los fabricantes de portátiles y estandarizarlo...
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 11, 2017 09:06 AM

    October 10, 2017

    enavas.blogspot.com.es

    Compartir impresora en nuestra red mediante OpenWRT

    Si tenéis una impresora usb y un router wifi con un puerto USB y OpeWRT instalado, podéis compartirla con los equipos de vuestra red con tan sólo instalar unos pocos paquetes. Veamos cómo:

    1) Nos conectamos al router wifi mediante ssh.

    2) Una vez conectados, actualizamos los índices de los repositorios:
    # opkg update
    3) Instalamos los paquetes necesarios:
    # opkg install kmod-usb-printer p910nd luci-app-p910nd luci-i18n-p910nd-es

    Si iniciamos sesión en en interfaz web de nuestro router, una vez instalados los paquetes, veremos que nos aparece un nuevo menú "Servicios":


    Hacemos clic en el menú "Servicios".  Se nos desplegará una lista con los servicios que tenemos instalados en nuestro router. Hacemos clic en la opción correspondiente al servidor de impresión p910nd que se nos muestra para configurarlo. En la ventana que se nos muestra, hacemos clic en la casilla "activar".


    Y, por último, pulsamos en el botón "Guardar y aplicar".

    Una vez instalados los paquetes en OpenWRT y configurado el servicio, no tenemos más que configurar la impresora en los clientes usando: socket://IP-del-router:9100
    Ejemplo: socket://172.19.144.3:9100
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 10, 2017 04:29 PM

    isc-dhcp-server: Asignar diferentes servidores DNS a clientes con diferente sistema operativo

    En nuestros centros tenemos isc-dhcp-server funcionando con un backend ldap para ofrecer servicio DNS a los clientes del centro.

    Por si no lo sabéis, es posible asignar diferentes servidores DNS a clientes con diferente sistema operativo mediante isc-dhcp-server. Supongo que os preguntaréis para qué podemos querer hacer ésto... Muy sencillo. Por ejemplo, si en nuestras instalaciones tenemos un servidor de Active Directory, es necesario que los clientes Windows tengan configurado como servidor DNS el servidor de Active Directory.

    DNS es un servicio fundamental para Active Directory, por lo que al instalar el servicio de Active Directory, se configura el servidor como servidor DNS. ¿Por qué? Por las siguientes razones:
    • Los clientes buscan a los Controladores de Dominio a través de DNS. Por consiguiente, es necesario para que tanto los equipos como los usuarios puedan autenticarse en el dominio.
    • Los controladores de dominio se encuentran entre sí a través del servicio DNS. De esta manera, el servidor DNS es necesario para que funcione la replicación del directorio activo entre los diferentes controladores de dominio.
    • Los controladores de dominio encuentran a los que tienen la funcionalidad de Catálogo Global usando el servicio DNS.

    Es posible que queramos que los clientes linux sigan usando los servidores DNS principales, pero si tenemos un controlador de dominio Windows, nos va a interesar que los clientes windows usen el controlador de dominio de Windows.

    Si os fijáis en el fichero de concesiones /var/lib/dhcp/dhcpd.leases, veréis que las máquinas Windows envían el identificador MSFT 5.0:
    set vendor-class-identifier = "MSFT 5.0";

    Viendo ésto, no tenemos más que modificar la configuración de isc-dhcp-server para asignar diferentes servidores de dominio a los clientes en función de su vendor-class-identifier:
    if substring (option vendor-class-identifier, 0, 9) = "MSFT 5.0" { option domain-name-servers 172.19.144.76, 172.19.144.90 ; }
    else { option domain-name-servers 172.19.144.2, 172.19.144.3; }
    Creo que la sintaxis se entiende bastante bien y no requiere muchas explicaciones. Si el cliente tiene como vendor-class-identifier MSFT 5.0, es un sistema operativo Windows y se le asignarán como servidores DNS los servidores de Active Directory, y, si no, se le asignarán los servidores DNS por defecto.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 10, 2017 10:24 AM

    Procedimiento de actualización de Ubuntu en Infolab

    pkgsync es actualmente una poderosa herramienta que podemos utilizar conjuntamente con tmux-cssh para actualizar rápidamente un conjunto de máquinas.

    El procedimiento que suelo seguir para actualizar Ubuntu de un plumazo en todos los equipos de un aula de Infolab es el siguiente:

    1) Enciendo los equipos del aula con epoptes:


    2) Abro un terminal e inicio tmux-cssh:
    # tmux-cssh $(cat /etc/dsh/group/infolab02)
    infolab02 es un fichero que contiene los nombres de las máquinas de cada equipo del infolab 02.

    Al ejecutar el comando anterior estoy abriendo una conexión multiplexada a todos los equipos del infolab 02 que se encuentran encendidos.

    3) Ejecuto el comando:
    # pkgsync -pcrS

    Donde:
    • -p: Elimina kernels antiguos.
    • -c: Elimina dependencias de paquetes desinstalados, configuraciones de paquetes desinstalados y limpia la cache de paquetes.
    • -r: Elimina librerías huérfanas.
    • -S: Apaga el equipo al terminar.


    Una vez hecho ésto, los equipos se irán actualizando y apagando al terminar.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 10, 2017 09:45 AM

    Ruben J Garcia

    Kotlin DSL for REST in 5 minutes

    Do you know that you can create a Kotlin DSL with a few lines of code? In this post, we will see how to create a DSL over theApache HttpComponents library

    Kotlin is a JVM language. This is how is described in its page:

    Statically typed programming language for modern multiplatform applications
    100% interoperable with Java™ and Android™

    It has a lot of features and you can use to build your Android apps. We will focus on Type Safe Builders the feature that let us create DSL

    Defining a Kotlin DSL for a Rest Client

    At the end of this post, we can write code like this with our Kotlin DSL

    GET("http://www.google.com") {
      withParam("foo", "bar")
      withHeader("Accept", "text/plain")
    }
    

    Looks like magic, doesn’t it?

    First of all we will create our pom.xml to add the dependencies and config the Kotlin jars

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>es.rubenjgarcia</groupId>
      <artifactId>rest-dsl</artifactId>
      <version>0.1.0-SNAPSHOT</version>
    
      <properties>
        <kotlin.version>1.1.51</kotlin.version>
      </properties>
    
      <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.5.3</version>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
        <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
        <plugins>
            <plugin>
                <artifactId>kotlin-maven-plugin</artifactId>
                <groupId>org.jetbrains.kotlin</groupId>
                <version>${kotlin.version}</version>
    
                <executions>
                    <execution>
                        <id>compile</id>
                        <goals>
                          <goal>compile</goal>
                        </goals>
                    </execution>
    
                    <execution>
                        <id>test-compile</id>
                        <goals>
                          <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
      </build>
    </project>
    

    In the directory src/main/kotlin we will create the RestDSL.kt with the next content

    import org.apache.http.client.methods.HttpGet
    import org.apache.http.client.methods.HttpRequestBase
    import org.apache.http.client.utils.URIBuilder
    import org.apache.http.impl.client.HttpClients
    import org.apache.http.util.EntityUtils
    
    class RestBuilder(private val request: HttpRequestBase) {
    
        private var params: List<Pair<String, String>> = emptyList()
        private var headers: List<Pair<String, String>> = emptyList()
    
        fun withParam(name: String, value: String) {
            this.params = this.params + Pair(name, value)
        }
    
        fun withHeader(name: String, value: String) {
            this.headers = this.headers + Pair(name, value)
        }
    
        fun exec(): HttpResponse {
            val httpclient = HttpClients.createDefault()
            if (params.isNotEmpty()) {
                val uriBuilder = URIBuilder(request.uri)
                for ((first, second) in params) {
                    uriBuilder.addParameter(first, second)
                }
                request.uri = uriBuilder.build()
            }
    
            for ((first, second) in headers) {
                request.addHeader(first, second)
            }
    
            httpclient.execute(request).use { r ->
                val entity = r.entity
                EntityUtils.consume(entity)
                return r
            }
        }
    }
    
    fun GET(url: String, init: RestBuilder.() -> Unit) = RestBuilder(HttpPost(url)).apply(init).exec()
    

    Let me explain the code

    • The function GET receives a String and a lambda expression. The magic is in the lambda expression init. Everything inside has a reference to the RestBuilder object so we can invoke functions in a DSL way. We apply (invoke) the function and then we call the exec function
    • We have 2 functions withParam and withHeader to add params and headers to our request
    • The function exec is where we execute the call. We add the params and the headers using the API provided by the Apache HttpComponents library and return the response

    As you can see it’s easy to create a Kotlin DSL to implement the GET function so now you can implement the other functions: POST, DELETE, PATCH, …

    The post Kotlin DSL for REST in 5 minutes appeared first on Ruben J Garcia.

    by Ruben Garcia at October 10, 2017 08:15 AM

    October 06, 2017

    ernestogamez.es

    Calzado Infantil

    En el último post hablamos un poco sobre la importancia que tiene comprar un buen calzado infantil a nuestros hijos y hemos recibido varios e-mails donde nos pedían una ampliación de dicha información, así como la recomendación de alguna tienda online que, además de la ya mencionada Piesitos, nos dé la seguridad de estar comprando el calzado adecuado. Vamos a ello…

    Antes de nada debemos tener en cuenta que el pie de bebés y niños está en constante crecimiento, por lo que llevar un calzado inadecuado puede obligar al pie a adoptar posturas inadecuadas e incluso puede llegar a deformarlo. Es por esto que es de vital importancia que los niños porten el calzado correcto.

    Hemos hablado con Acamelia, escuelas infantiles en Vigo, y nos han confirmado nuestras sospechas. Muchos padres, desconocedores de la importancia que tiene el calzado a esas edades, llevan a sus hijos con zapatos y zapatillas confeccionados en países asiáticos que no cumplen con la normativa europea. En otras palabras, compran calzado económico en franquicias, grandes superficies y en las conocidas tiendas “chinas” sin comprobar si es un calzado homologado por la Unión Europea. Inconscientemente, esos padres y madres pueden llegar a causar graves problemas en el correcto desarrollo motor de sus hijos y, por eso, es realmente importante transmitir la información correcta y adecuada que permita a nuestra sociedad ser conocedora de las consecuencias que puede traer usar un calzado inadecuado.

    Aproximadamente entre los 11 y los 14 meses, la mayoría de los niños comienzan a caminar. Es en ese momento cuando los pies del bebé han de soportar el peso de su cuerpo y por ende sus primeros zapatos deben estar fabricados con un diseño que proteja el pie y proporcione el equilibrio y la estabilidad adecuada con el fin de que el niño se sienta seguro, al tiempo que favorezca el buen funcionamiento y desarrollo muscoesquelético.

    El calzado infantil ha de ser flexible y firme, es decir, hemos de encontrar el equilibrio perfecto para que el zapato se adapte a los movimientos del niño y que al mismo tiempo cuente con la sujeción adecuada para evitar torceduras o una mala higiene postural. También es muy recomendable que el calzado infantil esté reforzado en la puntera y el contrafuerte para proteger al pie de posibles traumatismos.

    Una tienda online que como Piesitos cuenta con una amplia gama de modelos, diseños y reconocidas marcas es Andandito, donde encontraréis precios competitivos y calzado infantil de calidad homologado y adaptado a la morfología y el crecimiento de los niños..

    En qué debemos fijarnos

    La suela puede ser de cuero o goma y ha de permitir una correcta y cómoda flexión del pie, pero también debe amortiguar los impactos en el suelo. Por supuesto, también hemos de comprobar que no resbale para prevenir caídas innecesarias. Además, la horma del zapato ha de ser ancha para no comprimir el pie del pequeño. Tanto el diseño como los acabados deben ser lisos ya que los pies de los niños son muy delicados y cualquier acabado rugoso puede provocarles rozaduras. Con respecto a los cierres hay de todo tipo, con velcro, hebillas o cordones, pero lo importante es que permitan una amplia apertura del zapato con el fin de que el pie del niño entre y salga con facilidad, sin provocar posturas forzadas ni malas posiciones. Y, por último pero no menos importante, debemos tener en cuenta los materiales con los que están fabricados, pues si son naturales como la piel favorecerán la transpiración y se evitarán rozaduras mientras que si hablamos de materiales sintéticos es posible que no sean transpirables y el recalentamiento del pie dentro del zapato provoque llagas y otros problemas.

    Para obtener más información lo más recomendable es consultar a vuestro pediatra de confianza.

    The post Calzado Infantil appeared first on Ernestogamez.

    by Andrea Lavián at October 06, 2017 11:31 AM

    October 04, 2017

    enavas.blogspot.com.es

    Procedimiento de clonación de portátiles

    Hemos hablado mucho acerca de los procedimientos de clonación de portátiles y discutido acerca del tema de si usar DRBL para clonar en modo multicast o utilizar pendrives locales.

    Como ya me han preguntado en más de una ocasión, os cuento qué sistema estoy utilizando actualmente:

    Para empezar, es importante decir que en los portátiles de mi centro sigo utilizando el esquema de particiones en el que existe una partición (sda3), de tamaño idéntico a la partición del sistema (sda2) se creó para mantener el sistema actualizado, algo que, por otro lado, nunca llegó a implementarse.  Dicha partición tiene montado clonezilla y un directorio /home/partimag que almacena la imagen de las dos particiones que conforman el sistema del portátil:
    • /dev/sda1 => /boot
    • /dev/sda2 => /
    Por otro lado, el directorio /home se encuentra separado en una partición sda6, con el fin de que no se eliminen los directorios home de los usuarios cuando se restaure el sistema operativo del portátil.


    En cuanto a la partición sda5 es para la swap.

    Tanto para crear una imagen del portátil, como para restaurarlo, entre otras, existen entradas de grub con contraseña:


    Lo que suelo hacer cuando quiero clonar los equipos es actualizar un portátil y crear una imagen  de la partición sda3 usando la entrada de grub correspondiente. 

    Una vez que tengo la imagen copio todo el contenido de la partición sda3 (es decir, clonezilla y la imagen de clonación actualizada) a 8 o 10 tarjetas SD de las que nos llegaron con los portátiles HP. Estas tarjetas SD me servirán para distribuir la imagen de forma local a cada uno de los portátiles.

    Para copiar la imagen de clonación a los portátiles, no tengo más que:
    1. Introducir la SD.
    2. Arrancar el portátil e iniciar una sesión de root.
    3. Ejecutar un script (copy-cloning-image) localmente en el portátil que automáticamente monta las particiones, borra la imagen de clonación antigua, copia la nueva y desmonta las particiones.


    El script copy-cloning-image es muy sencillo. Podéis echarle un vistazo en mi github.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 04, 2017 12:16 PM

    October 03, 2017

    enavas.blogspot.com.es

    Utilizar FireSSH para conectar mediante SSH a nuestros equipos desde el navegador

    FireSSH es un complemento o extensión (dependiendo de si estamos utilizando Firefox o Google Chrome), disponible para ambos navegadores que nos va a permitir realizar conexiones remotas a equipos vía ssh.


    Para consultar documentación acerca de la instalación, uso, configuración, etc... os recomiendo visitar su página de ayuda:
    http://firessh.net/help.html

    Esta extensión es interesante para disponer de un cliente ssh en equipos donde no contamos con permisos de administración para instalar software.

    Es importante reiniciar firefox para que el proceso de instalación se complete.

    Para iniciar FireSSH en Google Chrome, no tenemos más que acceder a las aplicaciones de Google Chrome, por ejemplo, escribiendo chrome://apps en la barra de direcciones del navegador. Allí encontraremos el lanzador.

    Para iniciar FireSSH en Firefox, abrimos el menú, hacemos clic en Herramientas de desarrollador y allí encontraremos el lanzador.

    Una vez abierta la herramienta, podremos introducir los datos de host, login y password como mínimo para realizar una conexión:


    Si es la primera vez que nos conectamos a una máquina, nos preguntará si queremos añadir su huella:


    La añadimos y ya tendremos un bonito terminal:


    Por cierto, podremos personalizar tanto los colores del texto, como los del fondo o el tamaño de fuente.

    Por último, me gustaría destacar que es posible copiar en el terminal tal y como lo hacemos en un terminal de Linux: Utilizando Ctrl + Shift + C. Del mismo modo también podemos pegar usando la combinación Ctrl + Shift + V.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at October 03, 2017 04:49 PM

    September 29, 2017

    enavas.blogspot.com.es

    Acceso a carpeta pública en NAS

    Al realizar el cambio de servidores, decidí aprovechar el servidor Fujitsu como NAS (servidor de almacenamiento) para liberar el servidor principal y compartir recursos tanto con Windows como con Linux. 

    He creado una carpeta pública en el NAS en la que los miembros del grupo teachers pueden subir archivos para compartir con los alumnos. Esta carpeta se mapea como una unidad para que todos los usuarios tengan acceso a ella desde Windows de forma transparente.


    Para poder subir archivos tanto desde Linux como desde Windows, por cuestiones técnicas, he compartido la carpeta vía ftp, de manera que cualquier usuario del grupo teachers podrá utilizar un cliente ftp, como por ejemplo filezilla, para subir archivos:


    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 29, 2017 08:29 AM

    September 28, 2017

    enavas.blogspot.com.es

    Actualizar firmware Router AR-5387un

    Para actualizar el router AR-5387un con un nuevo firmware, no tenemos más que mantener pulsado el botón Reset durante más de 20 segundos. Una vez hecho ésto, el dispositivo entrará en modo de actualización de firmware (modo de inicio CFE).

    Lo conectamos a la red y podremos actualizar el firmware desde nuestro ordenador introduciendo la dirección predeterminada en un navegador.

    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 28, 2017 05:31 PM

    September 27, 2017

    enavas.blogspot.com.es

    Establecer refind como cargador de arranque por defecto desde EFI Shell

    De vez en cuando, al simpático de Windows le da por romper el arranque dual, estableciéndose él mismo como gestor de arranque y eliminando toda posiblidad de arranque de otros sistemas operativos instalados en la máquina.

    Como ya he comentado en más de una ocasión, en los equipos con arranque EFI utilizo rEFInd como cargador de arranque. Pero, además, tengo un pendrive con rEFInd con el que poder arrancar cualquiera de los sistemas instalados en los equipos cuando a Windows le ha dado por romperlo.

    En un post de octubre de 2016, vimos cómo establecer rEFInd como gestor de arranque por defecto desde Linux. Y en otro post del mismo mes, vimos cómo establecer rEFInd como gestor de arranque por defecto desde Windows.

    En este post vamos a ver cómo establecer rEFInd como cargador de arranque por defecto desde un shell de EFI:

    Para empezar, podemos arrancar el equipo mediante un pendrive con rEFInd, que dispone, entre otras herramientas, de un EFI shell. Para ello seleccionamos la herramienta que nos permite iniciarlo:


    Una vez seleccionada, pulsamos "Enter" para iniciarla:


    Una vez abierto el shell, ejecutamos el siguiente comando para obtener un listado de las entradas de arranque EFI e identificar el número de entrada que corresponde a rEFInd:
    Shell> bcfg boot dump -b
    Cuando veáis el listado, observaréis que se encuentran numeradas a partir de 0.
    Identificamos qué número tiene la entrada de rEFInd... 

    Suponiendo que, por ejemplo, tiene el número 1, no tenemos más que usar el siguiente comando para mover la entrada 1 a la entrada 0:
    Shell> bcfg boot mv 1 0
    Una vez reemplazado el orden, reiniciamos el equipo y listo:
    Shell> reset
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 27, 2017 12:09 PM

    September 26, 2017

    enavas.blogspot.com.es

    Firmware LEDE 17.01.2 para routers A4001N y A4001N1

    LEDE (Linux Embedded Development Environment), es un firmware alternativo de código abierto basado en Linux desarrollado de la mano de una gran parte de los desarrolladores de OpenWRT.



    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 26, 2017 10:07 PM

    Restaurar la configuración de un switch guardada en el servidor tftp

    Es importante tener una copia de configuración de nuestros switches, sobre todo cuando ésta es compleja, porque nos va a faciltar la tarea de restauración de la configuración en caso de que haya problemas.

    En este post, vamos a ver cómo realizar la restauración de la copia de seguridad de la configuración de un switch en otro de la misma marca y modelo para reemplazarlo:

    Lo primero que tendremos que hacer es conectarnos al nuevo switch por consola o por red.

    Una vez conectado, introducimos el usuario y password. Y accedemos al menú "Switch Utilities":


    Se nos mostrará el siguiente menú de configuración. Como lo que queremos es restaurar la configuración almacenada en el servidor tftp, seleccionamos "Use Configuration File on TFTP Server":


    Nos pedirá que introduzcamos la dirección IP del servidor y el nombre del archivo de configuración a restaurar. Lo introducimos y seleccionamos "START":


    Después de seleccionar "START", pulsamos ENTER para aplicar la configuración y comenzará el proceso de flasheo:


    Una vez flasheado, se reiniciará el Switch para aplicar la configuración:


    Una vez reiniciado, tendremos acceso de nuevo a la pantalla de login desde donde podremos acceder para comprobar que los cambios se han aplicado correctamente:


    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 26, 2017 10:04 AM

    Guardar configuraciones de Switches Dlink DES-3226 en un servidor tftp

    En un post de marzo de 2015, vimos cómo instalar un servidor tftpd-hpa para guardar configuraciones de switches, como por ejemplo, los DLINK DES-3226. Por supuesto, este servidor nos será también de utilidad para restaurar configuraciones o actualizar el firmware de los dispositivos.

    En este post vamos a ver un ejemplo de cómo guardar la configuración de un switch Dlink DES-3226 en el servidor tftp mediante el interfaz CLI de los mismos.

    Lo primero que debemos hacer es conectarnos al switch mediante telnet y el dispositivo nos pedirá que introduzcamos un usuario y contraseña:


    Lo introducimos y nos mostrará un menú de opciones. Seleccionamos "System Utilities":


    Como lo que queremos es guardar la configuración del Switch en el servidor tftp, seleccionamos la opción "Save Settings to TFTP Server":


    Nos mostrará un menú donde debemos introducir la dirección IP del Servidor tftp y el nombre con el que queremos guardar el fichero. Lo introducimos, seleccionamos la opción "START":


    Y pulsamos ENTER para comenzar el proceso de guardado. Cuando termine, vermos una pantalla como la siguiente:


    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 26, 2017 09:03 AM

    September 25, 2017

    Ruben J Garcia

    ELK para peticiones HTTP con Spring y Logbook

    Una aplicacion que esta desplegada en produccion no esta terminada hasta que no tiene un buen sistema de logs. En la era de los microservicios y las aplicaciones distribuidas en las que el intercambio de informacion se hace mayoritariamente a traves de HTTP es muy importante logar esas peticiones, tantos las entrantes como las salientes para poder depurar nuestra aplicacion en caso de fallo. Con el framework ELK podemos logar de una forma sencilla estas peticiones

    Que es ELK

    ELK es un conjunto de herramientas de Elastic las cuales unidas nos aportan una forma muy sencilla de recoger logs de aplicaciones. Las herramientas que componen ELK son:

    • Elasticsearch: La base de datos donde se almacenan los logs
    • Logstash: Es una herramienta de ingestion de datos. Es la que se encargara de coger los datos y mandarlos a Elasticsearch
    • Kibana: La herramienta en la que veremos nuestros datos

    Gracias a estas 3 herramientas tenemos todo lo necesario para guardar y mostrar los logs. Solo necesitamos generarlos de alguna manera en nuestra aplicacion

    Logbook

    Logbook es una libreria creada por Zalando para logar peticiones y respuestas HTTP. Esta empresa tiene muchos servicios y necesitaban poder logar lo que estaba pasando en ellos asi que crearon la libreria

    Tiene muchas opciones y se integra perfectamente con Spring Boot por ejemplo. Se pueden logar las peticiones en texto plano o JSON e incluso podemos definir un nombre de categoria para aislarla de los demas logs de aplicacion

    Su configuracion es muy sencilla. Veamos como se hace en una aplicacion Spring Boot

    Lo primero es añadir la dependencia en nuestro pom.xml

    <dependency>
      <groupId>org.zalando</groupId>
      <artifactId>logbook-spring-boot-starter</artifactId>
      <version>1.4.0</version>
    </dependency>
    

    Y ahora solo debemos poner en el archivo application.yml las opciones de configuracion necesarias

    logbook:
      format.style: json
      write:
        level: INFO
        category: elk-data
    

    Una vez tenemos cambiado esto es hora de configurar el archivo de log para que nos saque en un fichero a parte los logs que nos interesan

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <include resource="org/springframework/boot/logging/logback/base.xml"/>
    
      <appender name="ELK-DATA" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>elk-data.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
          <Pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC} %msg%n</Pattern>
        </encoder>
    
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <!-- rollover daily -->
          <fileNamePattern>elk-data.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
          <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
          </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
      </appender>
    
      <logger name="elk-data" level="INFO">
        <appender-ref ref="ELK-DATA" />
      </logger>
    </configuration>
    

    El siguiente paso es configurar un entorno ELK. Para no complicarnos mucho la vida vamos a usar Docker Compose en aras de simplificar todo. Crearemos el fichero docker-compose.yml con el siguiente codigo

    version: '3'
    
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.6.1
        ports:
          - "9200:9200"
          - "9300:9300"
        environment:
          ES_JAVA_OPTS: "-Xmx256m -Xms256m"
          xpack.security.enabled: "false"
        networks:
          - elk
    
      logstash:
        image: docker.elastic.co/logstash/logstash:5.6.1
        ports:
          - "5000:5000"
        environment:
          LS_JAVA_OPTS: "-Xmx256m -Xms256m"
          xpack.security.enabled: "false"
        volumes:
          - ./conf/logstash:/usr/share/logstash/pipeline
        networks:
          - elk
        depends_on:
          - elasticsearch
    
      kibana:
        image: docker.elastic.co/kibana/kibana:5.6.1
        ports:
          - "5601:5601"
        environment:
          SERVER_NAME: kibana
          ELASTICSEARCH_URL: http://elasticsearch:9200
          xpack.security.enabled: "false"
        networks:
          - elk
        depends_on:
          - elasticsearch
    networks:
      elk:
    

    Crearemos el fichero de configuracion de logstash en conf/logstash.conf

    input {
      tcp {
        port => 5000
      }
    }
    
    filter {
      grok {
        match => {
          "message" => "%{TIMESTAMP_ISO8601:timestamp} %{GREEDYDATA:log}"
        }
      }
      json {
        source => "log"
        remove_field => ["message"]
      }
      mutate {
        remove_field => ["log"]
      }
    }
    
    output {
      elasticsearch {
        hosts => "elasticsearch:9200"
      }
    }
    

    Lo que estamos haciendo con este fichero es parsear la fecha de nuestro log y parsear el json que tenemos como mensaje de log y añadirlo al json que se grabara en elasticsearch

    Para la ingesta de datos hemos creado un socket tcp en el puerto 5000. Se pueden configurar muchas formas de ingesta como leer de un fichero, por HTTP, de base de datos…

    Arrancamos nuestro stack con el comando docker-compose up -d y empezamos a generar logs en nuestra aplicacion haciendo peticiones HTTP

    Cuando tengamos ya los logs en un fichero podemos mandarlo a logstash usando Netcat con el comando nc localhost 5000 logs/elk/elk-data.log

    Solo falta configurar Kibana para poder ver los logs que hemos mandado a Logstash. Para ello iremos a la url localhost:5601 y configuramos el campo Time Filter field name a timestamp. Pulsamos Create y ya tenemos nuestros logs en Kibana

    The post ELK para peticiones HTTP con Spring y Logbook appeared first on Ruben J Garcia.

    by Ruben Garcia at September 25, 2017 11:12 AM

    Entre Dev Y Ops

    Píldora 1: Analizando la seguridad del web del referendum catalán.

    EDyO Podcast

    Hoy os presentamos la píldora 1 de nuestro podcast, analizando el artículo sobre la seguridad de la web del referendum catalán.

    Si os gusta nuestro trabajo por favor corred la voz, dadnos feedback, y valorad con 5 estrellas iTunes y me gusta en Ivoox.

    Blog Entredevyops

    Twitter Entredevyops

    Leer más… (1 min remaining to read)

    by David Acacio at September 25, 2017 10:00 AM

    September 24, 2017

    UnLugarEnElMundo

    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.

    by Josemaría at September 24, 2017 05:24 PM

    September 22, 2017

    Entre Dev Y Ops

    Referendum 1-O: ¿Dónde votar?

    yes-no

    No, no nos hemos vuelto locos, en Edyo seguimos hablando de tecnología. Sabemos también que últimamente no publicamos más que podcasts; a pesar de ello, mantenemos el blog para cosas que se cuentan mejor escritas que narradas. Hoy os traemos un análisis técnico que no puede ser más de actualidad: la web de consulta del censo para el referendum del 1-O. Os prometo que vale la pena.

    Leer más… (8 min remaining to read)

    by Daniel Aresté at September 22, 2017 08:00 PM

    joseangelfernandez.es

    Despliegues anidados de plantillas ARM automatizados con PowerShell y Azure Blob Storage

    A la hora de desplegar una plantilla de Azure Resource Manager, el proceso es bastante sencillo tanto desde la línea de comandos multiplataforma como desde PowerShell. Se resume en un comando al que se le pasa el grupo de recursos y la plantilla que se quiere desplegar. Sin embargo, cuando en lugar de una única plantilla queremos hacer un despliegue de una solución más compleja compuesta por varias plantillas anidadas, esto requiere incluir algún elemento intermedio para lograrlo.

    Desde una plantilla de ARM es posible invocar el despliegue de otras plantillas ARM con una única condición: deben de estar accesibles de forma pública al orquestador que las interpreta en Azure para que pueda descargársela e implementar los recursos que hemos definido. El uso de plantillas anidadas puede darse por diversos motivos, generalmente los principales suelen ser: evitar plantillas de varios miles de líneas y facilitar el trabajo de la persona o el equipo de personas que escriben dicha plantilla.

    Una solución bastante común al problema es hacer uso de un repositorio público de código como lo que ofrece GitHub. Este modo es el que emplea el propio repositorio público de plantillas que Azure pone a vuestra disposición para implementar directamente o para tomar como ejemplo a la hora de crear nuestras propias plantillas. Sin embargo, en muchas ocasiones no nos interesa que nuestras plantillas estén accesibles por terceros dentro de Github. Es ahí donde entra en juego la solución que empleo yo. Probablemente no sea la mejor solución o la más completa pero es la que me facilita el trabajo con las plantillas anidadas en varios despliegues preparados para diferentes clientes. El sistema funciona de la siguiente manera.

    Lo primero es crear un grupo de recursos destinado únicamente a alojar los ficheros asociados a nuestro despliegue y dentro de él definir una cuenta de almacenamiento.

    New-AzureRmResourceGroup -Name $artifactsResourceGroupName -Location $artifactsResourceGroupLocation 
    New-AzureRmStorageAccount -ResourceGroupName $artifactsResourceGroupName -Location $artifactsResourceGroupLocation -Name $artifactsResourceGroupStorageAccountName -SkuName Standard_GRS -Kind Storage
    

    Tras ello, seleccionar los ficheros que se quieren subir. Yo por defecto subo todos los ficheros relacionados con las plantillas, scripts de PowerShell utilizados en la extensión de CustomScript y otros ficheros comprimidos como extensiones de DSC o datos que se descargarán posteriormente.

    $filesToUpload = Get-ChildItem ".\*" -Include *.json, *.zip, *.ps1
    

    Una vez obtenidos los ficheros es necesario interactuar con la cuenta de almacenamiento obteniendo las claves de acceso y generando el contexto. Aquí es importante tener en cuenta que estamos mezclando módulos de ARM con módulos de ASM ya que la subida de ficheros únicamente está disponible a través del módulo de almacenamiento del modo clásico.

    $artifactsResourceGroupStorageAccountKey = Get-AzureRmStorageAccountKey -ResourceGroupName $artifactsResourceGroupName -Name $artifactsResourceGroupStorageAccountName
    $storageContext = New-AzureStorageContext -StorageAccountName $artifactsResourceGroupStorageAccountName -StorageAccountKey $artifactsResourceGroupStorageAccountKey[0].Value
    New-AzureStorageContainer -Name "artifacts" -Permission Blob -Context $storageContext
    
    foreach ( $file in $filesToUpload) {
        Set-AzureStorageBlobContent -File $file.Name -Container "artifacts" -Blob $file.Name -Context $storageContext -Force 
    }
    

    Lo último es construir la URL base para nuestros ficheros con el extremo más el nombre del contenedor.

    $artifactsBaseUri = $storageContext.BlobEndPoint + "artifacts"
    

    Tras ello, definiremos un nuevo grupo de recursos dónde se realizará el despliegue de los recursos y realizamos el despliegue. Como parámetro estamos pasando la url base de los ficheros. El objetivo es que esté disponible dentro de la plantilla para construir la URL completa.

    New-AzureRmResourceGroup -Name $clusterResourceGroupName -Location $clusterResourceGroupLocation -Force 
    New-AzureRmResourceGroupDeployment -Name "deployment-$((Get-Date).Ticks)" -ResourceGroupName $clusterResourceGroupName -Mode Incremental -TemplateUri "$artifactsBaseUri/cluster.main.json" -ArtifactsBaseUri $artifactsBaseUri -Verbose
    

    El acceso al blob es posible debido a que se ha dado el permiso correspondiente a la hora de crear el contenedor. Una alternativa más segura sería generar un token SAS por cada uno de los ficheros e inyectarlo como un parámetro del tipo objeto a la plantilla; sin embargo, dado que una vez desplegada la plantilla elimino el grupo de recursos temporal no es crítico el utilizar la URL del blob o utilizar el token SAS

    Hasta este punto se ha cubierto los puntos básicos del funcionamiento de cómo subirlo y desplegarlo. Sin embargo, en el script completo que uso hay otros pasos que facilitan el realizar los despliegues. Entre ellos se encuentra:

    • Definir parámetros del script
    • Facilitar la selección de la suscripción sobre la que hacer el despliegue
    • Chequeo de la existencia de recursos para evitar mensajes de error por pantalla
    • Trazas por pantalla de los pasos que se van realizando. Una mejora sería sustituir el Write-Output por Write-Verbose

    Este sería el script completo

    Param(
        [parameter(Mandatory=$false,
        HelpMessage="Azure region where resources would be provisioned")]
        [string] $location = "North Europe",
    )
    
    $ErrorActionPreference = "Stop"
    
    ## Deployment artifacts configuration variables
    $artifactsResourceGroupStorageAccountName = "exartifactssa"
    $artifactsResourceGroupLocation = $location
    $artifactsResourceGroupName = "example-artifacts"
    
    # Add subscription name to avoid prompt message for selecting subscription
    $subscription = ""
    
    if (-not $subscription) {
        try {
            Write-Output "|-->; Obtaining Azure subscriptions available"
            $subscription = Get-AzureRmSubscription
        }
        catch {
            Write-Output "You need to login to Azure before continuing. Please, introduce your credentials in the windows that has appeared"
            Login-AzureRmAccount | Out-Null
            $subscription = Get-AzureRmSubscription
        }
    
        Write-Output "|--->; Obtained"
        $workingSubscription = ($subscription |  Out-GridView -Title "Select the subscription to deploy" -OutputMode Single)
    
        Select-AzureRmSubscription -SubscriptionName $workingSubscription.Name | Out-Null
    }
    else {
        Write-Output "|-->; Configuring subscription $subscription"
        Select-AzureRmSubscription -SubscriptionName $subscription
        Write-Output "|--->; Configured"
    }
    
    if ( -Not (Get-AzureRmResourceGroup -Name $artifactsResourceGroupName -Location $artifactsResourceGroupLocation -ErrorAction SilentlyContinue) ) {
        Write-Output "|-->; Creating $artifactsResourceGroupName artifacts resource group"
        New-AzureRmResourceGroup -Name $artifactsResourceGroupName -Location $artifactsResourceGroupLocation | Out-Null
        Write-Output "|--->; Created"
    }
    else {
        Write-Output "|-->; An artifacts resource group already exists. Skipping"
    }
    
    if ( -Not (Get-AzureRmStorageAccount -ResourceGroupName $artifactsResourceGroupName -ErrorAction SilentlyContinue | Where-Object { $_.StorageAccountName -like "$artifactsResourceGroupStorageAccountName*" } ) ) {
        Write-Output "|-->; Creating $artifactsResourceGroupStorageAccountName artifacts storage account"
        New-AzureRmStorageAccount -ResourceGroupName $artifactsResourceGroupName -Location $artifactsResourceGroupLocation `
            -Name $artifactsResourceGroupStorageAccountName -SkuName Standard_GRS -Kind Storage | Out-Null
        Write-Output "|--->; Created"
    }
    else {
        Write-Output "|-->; An artifacts storage account already exists. Skipping"
        $artifactsResourceGroupStorageAccountName = $(Get-AzureRmStorageAccount -ResourceGroupName $artifactsResourceGroupName -ErrorAction SilentlyContinue | Where-Object { $_.StorageAccountName -like "$artifactsResourceGroupStorageAccountNameP*" } | Select-Object StorageAccountName).StorageAccountName
    }
    
    # Obtaining files
    $filesToUpload = Get-ChildItem ".\*" -Include *.json, *.zip, *.ps1
    $artifactsResourceGroupStorageAccountKey = Get-AzureRmStorageAccountKey -ResourceGroupName $artifactsResourceGroupName -Name $artifactsResourceGroupStorageAccountName
    $storageContext = New-AzureStorageContext -StorageAccountName $artifactsResourceGroupStorageAccountName -StorageAccountKey $artifactsResourceGroupStorageAccountKey[0].Value
    
    if ( -Not (Get-AzureStorageContainer -Name "artifacts" -Context $storageContext -ErrorAction SilentlyContinue) ) {
        Write-Output "|-->; Creating artifacts container"
        New-AzureStorageContainer -Name "artifacts" -Permission Blob -Context $storageContext | Out-Null
        Write-Output "|--->; Created"
    }
    else {
        Write-Output "|-->; An artifacts container already exists. Skipping"
    }
    
    foreach ( $file in $filesToUpload) {
        Write-Output "|-->; Uploading file $($file.Name)"
        Set-AzureStorageBlobContent -File $file.Name -Container "artifacts" -Blob $file.Name -Context $storageContext -Force | Out-Null
        Write-Output "|--->t; Uploaded"
    }
    
    $artifactsBaseUri = $storageContext.BlobEndPoint + "artifacts"
    
    if ( -Not (Get-AzureRmResourceGroup -Name $clusterResourceGroupName -Location $clusterResourceGroupLocation -ErrorAction SilentlyContinue) ) {
        Write-Output "|-->; Creating resource group"
        New-AzureRmResourceGroup -Name $clusterResourceGroupName -Location $clusterResourceGroupLocation -Force | Out-Null
        Write-Output "|--->; Created"
    }
    else {
        Write-Output "|--->; A resource group already exists. Skipping"
    }
    
    Write-Output "|-->; Starting deployment of the cluster"
    New-AzureRmResourceGroupDeployment -Name "deployment-$((Get-Date).Ticks)" -ResourceGroupName $clusterResourceGroupName  `
        -Mode Incremental -TemplateUri "$artifactsBaseUri/your.template.file.json" `
        -ArtifactsBaseUri $artifactsBaseUri `
        -Verbose
    

    by jafernandez at September 22, 2017 05:03 PM

    September 20, 2017

    blogofsysadmins.com

    SOLUCIÓN Lowi: !No me funciona el compartir conexión¡

    Me cago en la pu…..!!!! Pensé: Otra vez que me la ha jugado la compañía telefónica low cost con sus ofertas y anuncios positivistas y me deje llevar por su buen marketing y precio… Pero no… buscando y rebuscando la me encontré con un hilo de htcmania.com en donde venia claramente el fallo de configuracion …

    by GhOsTi at September 20, 2017 11:52 PM

    enavas.blogspot.com.es

    Cambiar la ubicación de almacenamiento de aplicaciones y mover aplicaciones en Windows 10

    Cuando tenemos un equipo con el disco duro donde se encuentra instalado el sistema operativo muy pequeño, como por ejemplo, nuestros SIATIC, en los que se montó:
    • Un SSD de 128Gb repartido entre Windows (70Gb) y Ubuntu (50Gb).
    • Un HDD de 500Gb no utilizado.
    El espacio de almacenamiento asignado a Windows termina llenándose ya solamente con las actualizaciones, creando problemas. 

    Para liberar un poco el disco duro principal (SSD), he tomado las siguientes medidas:
    • Configurar Windows para que las aplicaciones se instalen a partir de ahora en el disco duro secundario (D:). Ésto crea dos directorios de almacenamiento en D: 
      • D:\Archivos de Programa
      • D:\Archivos de Programa (x86)
    • Mover mediante FreeMove aplicaciones instaladas desde:
      • C:\Archivos de Programa a D:\Archivos de Programa
      • C:\Archivos de Programa (x86) a D:\Archivos de Programa (x86)

    Configurar Windows para que las aplicaciones se instalen en el disco duro secundario es tan sencillo como ir siguiendo la siguiente secuencia de ventanas:

    Hacemos clic sobre Configuración:


    Hacemos clic sobre Sistema:


    Hacemos clic sobre Almacenamiento:


    Seleccionamos el desplegable para cambiar la unidad C: por D:


    Una vez hecho ésto, podéis comprobar que en D: se encuentran creados los directorios para almacenar aplicaciones:


    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 20, 2017 09:52 AM

    Instalar rEFInd desde Windows

    En un post de junio de 2016, os hablé del gestor de arranque rEFInd y os mostré cómo instalarlo desde Linux. 

    En nuestros equipos de Infolab tenemos arranque dual Ubuntu/Windows. El problema es que, en ocasiones, ciertas actualizaciones de Windows machacan el gestor de arranque y nos dejan sin arranque dual. 

    La forma más sencilla de instalar rEFInd desde Windows es usar un script de comandos de Windows que podéis descargar desde:

    Viene dentro de un archivo zip. Así que no tenéis más que descargarlo, descomprimirlo y distribuirlo a vuestras máquinas Windows para que se encuentre disponible en todas ellas.
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 20, 2017 09:01 AM

    September 19, 2017

    Entre Dev Y Ops

    Podcast 29: Herramientas del día a día.

    EDyO Podcast

    En el episodio 29 del podcast de http://www.entredevyops.es, hemos dado respuesta a la petición de un oyente, y os explicamos las herramientas que utilizamos en nuestro día a día: equipos, sistemas operativos, editores, etc.

    Si os gusta nuestro trabajo por favor corred la voz, dadnos feedback, y valorad con 5 estrellas iTunes y me gusta en Ivoox.

    A continuación podéis encontrar los enlaces comentados en este episodio.

    Leer más… (1 min remaining to read)

    by David Acacio at September 19, 2017 07:00 AM

    September 17, 2017

    # rm-rf.es

    Shrew Soft: VPN failed to attach to key daemon error

    Una entrada para explicar como solucionar este error, que puede aparecer al intentar conectar a un perfil de VPN a través del cliente Shrew Soft. En sistemas GNU/Linux, el origen del problema es no tener levantado el demonio iked. De la página man:

    The iked program communicates using the IKE protocol ( RFC 2409 ) to provide automatic keying for an IPsec capable host

    Simplemente, arracad el demonio iked y ya podréis conectar a la VPN sin problemas:

    # iked
    

    by Alex at September 17, 2017 07:33 AM

    September 15, 2017

    enavas.blogspot.com.es

    Coverflow Alt+Tab - GNOME Shell Extensions

    Nuestros portablets Vexia llevan instalado Ubuntu Xenial con entorno de escritorio Gnome Shell, parece ser motivado porque estos dispositivos tienen pantalla táctil.

    Pues bien, además llevan instaladas una serie de extensiones de Gnome Shell que modifican el comportamiento y la funcionalidad del escritorio. En el portablet que tengo asignado he cambiado algunas de estas extensiones y añadido otras, como por ejemplo Coverflow Alt+Tab que permite cambiar entre ventanas de una forma estéticamente más visual:


    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 15, 2017 06:06 PM

    Dónde se almacenan las extensiones de Gnome Shell


    Las extensiones de Gnome Shell se almacenan en dos ubicaciones:
    • Extensiones disponibles para todos los usuarios: /usr/share/gnome-shell/extensions/
    • Extensiones instaladas por un usuario: ~/.local/share/gnome-shell/extensions/
    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 15, 2017 05:45 PM

    Reiniciar Gnome Shell

    Cuando instalamos o desinstalamos extensiones de Gnome Shell manualmente, tenemos que reiniciar Gnome Shell para aplicar los cambios. 

    Reiniciar Gnome Shell es muy sencillo:

    Pulsamos Alt +F2 para introducir un comando:


    En el cuadro de diálogo que nos aparece, introducimos r y pulsamos la tecla Enter para reiniciarlo:



    Publicado por primera vez en http://enavas.blogspot.com.es

    by noreply@blogger.com (Esteban M. Navas Martín) at September 15, 2017 05:51 AM

    September 12, 2017

    blog de Rodolfo Pilas

    Openstack CLI y autocompletar en bash

    Hace ya tiempo que utilizo el comando integrado openstack para vincularme con nubes en Openstack de distintos proveedores y siempre extrañe que en algunas distribuciones de GNU/Linux no estuviera disponible el autocompletar en Bash.

    El comando openstack ofrece el parámetro complete que genera el script para que bash-completion lo cargue y quede funcional.

    Ejecutar como usuario con permiso sudo:

    $ openstack complete | sudo  tee /etc/bash_completion.d/osc.bash_completion > /dev/null
    

    o también como root:

    # openstack complete > /etc/bash_completion.d/osc.bash_completion
    

    El parámetro complete implementado en el comando openstack utiliza el framework cliff – Command Line Interface Formulation Framework para obtener la salida del script de bash-completion.

    by pilasguru at September 12, 2017 09:15 PM

    ernestogamez.es

    El look perfecto para las bodas otoñales

    Si en junio, julio y agosto un gran porcentaje de parejas aprovecha el calor para organizar la boda de sus sueños, muchos jóvenes prefieren los meses de septiembre, octubre e incluso noviembre por varios motivos: la luna de miel sale más económica, escapan de las agobiantes olas de calor y las fotos pueden salir preciosas en esta época del año. Ahora bien, como estamos tan acostumbradas a las bodas estivales parece que cuando nos encontramos con un evento de estas características en pleno otoño no sabemos cómo debemos vestir, así que hoy os traemos algunas ideas.

    Colores

    Si los tonos pasteles suelen ser los reyes de la fiesta en verano ya puedes ir olvidándote de ellos en otoño porque ya no suelen ir en entonación con la velada. Si tienes la suerte de que la celebración es durante el día, puede que aún puedas reutilizar ese vestido rosa palo de la boda de tu primo pero como sea nocturna olvídate…  Los colores del otoño son los tonos tierra, el verde botella, el inmortal negro, el rosa chicle y el amarillo.

    Zapatos

    Deja las sandalias para el verano que viene y busca un buen zapato semicerrado. En Calzados Luz tienen una amplia gama de zapato de tacón otoñal en tonos grises, dorados, platas, blancos, oscuros y tierra. Los zapatos destalonados son el furor de la temporada. Clásicos, y combinan con todo. Y, por supuesto, olvida las medias.

    Chaquetas

    En esta época del año no sabes si cubrirte o no hacerlo porque no hace ni frío ni calor. Tal vez lo mejor que podemos hacer es optar por un vestido de manga larga antes que por una chaqueta o, en su defecto, optar por un foulard.

    Vestidos

    Vogue presentó hace poco una colección de 30 vestidos para bodas en otoño y por lo que veo destacan los vestidos sencillos, de caída recta, sin demasiados adornos. Con respecto a la parte superior apuestan por la media manga y por la manga larga ajustada, a veces incluso con transparencias, cuello a la caja, cuello subido tipo geisha y algún que otro escote en V, pero pocos la verdad. Las faldas son rectas, con poco vuelo pero muy poco ajustadas. Pantalones hay pocos la verdad, creo que solo he visto un par de monos, nada más. Y con respecto al estilo he de decir que parece que este año va a pegar fuerte la inspiración oriental, y ahí lo dejo.

    De todos modos, si no queréis calentaros la cabeza y preferís pisar sobre seguro, optad por echarle un ojo al catálogo de Miticca.es. Seguro que no fallaréis con ninguno de sus diseños.

    The post El look perfecto para las bodas otoñales appeared first on Ernestogamez.

    by Andrea Lavián at September 12, 2017 05:01 PM

    La moda adulto-infantil

    Todos sabemos que nuestra sociedad se mueve por modas y `por eso cada generación acaba vistiendo del mismo modo, como si estuviéramos cortados por el mismo patrón. El problema es que esas modas o tendencias abarcan cada vez un mayor estrato social y aunque primero fueron las clases más pudientes las que intentaban seguir siempre las tendencias de los diseñadores (o sastres) de moda, ahora parece que cualquier clase social tiene que seguir el mismo estereotipo vistiendo, decorando o incluso comiendo, y lo malo es que los niños, que son natos imitadores, quieren exactamente lo mismo.

    Siglo XVI, una época en la que las camisas se llevaban como ropa interior y la sobriedad de la Contrarreforma hacía mella en Europa. Las mujeres llevaban sus bullones, mangas abultadas, gorgueras, faldas y sobrefaldas, corpiños, cofias… tenían más capas que una cebolla ¿y qué pasaba con las niñas? Pues que vestían exactamente igual. Lo mismo ocurría con los niños, aunque estos solían llevar el pantalón un poco más corto que los adultos. De igual modo ocurre en los siglos venideros y hoy en día, donde los niños quieren vestir como adultos y nosotros se lo permitimos. Porque, ya se sabe, es la moda.

    Tacones, el claro ejemplo de la “adultización” infantil

    Así, algunas niñas de 8 años lucen hoy zapatos con tacón y botas que imitan a las de las modelos de pasarela, una auténtica barbaridad en mi opinión. La hija de Katie Holmes y Tom Cruise lleva tacones desde que empezó a andar, o al menos eso parece en vista de las imágenes que tenemos de ella donde, con 3 años, ya luce zapatos de tacón cual adulta.

    Gracias a los dioses del Olimpo el resto de la población no está tan loca como Katie Holmes y no llevan a sus hijas con tacones a tan tierna edad, pero no es difícil ver a pequeñas de 12 y 13 años con una buena plataforma y con tacones de aguja en bodas, bautizos y comuniones.

    Lógicamente, ahora me dirán algunas madres que para bailar flamenco, por ejemplo, o bailes de salón, necesitan tacones, y obviamente es verdad. Pero una cosa es que usen tacones una vez a la semana durante un par de horas para clase de flamenco y otra muy diferente que lo hagan por costumbre. Además, incluso así debemos saber que hay “zapatos de flamenco” y “ZAPATOS DE FLAMENCO” y con los niños hay que tener cuidado. Os recomiendo E-Molina, tienen grandes productos de muy buena calidad.

    Los niños y niñas deben llevar un calzado cómodo, que se adapte a la morfología de su pie con la sujeción exacta que necesitan para desarrollar su aparato locomotor. Un buen catálogo de zapato infantil lo podemos encontrar en Piesitos, donde no hallaremos tacones ni ningún otro calzado que pueda dañar el pie de nuestros hijos.

    Cuando son bebés, que ni siquiera caminan, deben llevar un calcetín, un patuco o un calzado sin suela con el fin de les proteja del frío, pero nada más, ya que cualquier suela rígida podría forzar la posición de su pie y causar graves problemas. En Detalles Cucos podemos encontrar los clásicos y tradicionales patucos, ideales para cualquier época del año, pues podemos adquirirlos confeccionados en hilo de algodón para verano o en lana para el invierno.

    Y es que llevando tacones los músculos de las piernas están en un nivel de contracción mayor por la simple postura de “puntillas” y al echar los pasos, los músculos no se relajan tanto como en un caminar plano. Eso provoca que los tendones aprendan a estar en tensión, que la columna vertebral empiece a doler por culpa de la postura, que el metatarso deba aguantar un peso para el que no está preparado y, en conclusión, que una niña pequeña deforme completamente su figura y sufra graves problemas durante la adolescencia, madurez y sobre todo en la vejez.

    La “adultización” de los niños, y sobre todo de las niñas, entra por la retina sin apenas darnos cuenta, a través de la ropa, de los disfraces en Carnaval e incluso con los juguetes infantiles que promueven el maquillaje entre las niñas.

    El ejemplo más extravagante de todos lo tenemos en los concursos de belleza estadounidenses, donde niñas de 5 años usan tacones, ropa no adecuada a su edad, maquillaje e incluso botox. Todo con tal de ganar la ansiada corona de Miss, un título que probablemente hace más ilusión a sus frustradas-reinas-de-la-belleza-madres que a ellas mismas.

    Pero no es necesario ser tan extravagantes para darnos cuenta de lo que hablamos. La adultización en sí se define como un cambio en las características de la primera identificación del niño con sus padres, modificando su comportamiento o modo de pensar. Y este fenómeno cada vez se produce a edades más tempranas lo que, algunos expertos aseguran, puede derivar en violencia, bullying o juegos como la temida “ballena azul”.

    Y nosotros, sin embargo, seguimos alentando ese comportamiento, y si nuestro hijo nos pide con 4 años una tablet se la compramos en lugar de una buena pelota con la que jugar, y si nuestra hija nos pide maquillaje con 6 se lo compramos, en lugar de otra pelota igual a la del niño anterior… Indignante, pero cierto.

     

    The post La moda adulto-infantil appeared first on Ernestogamez.

    by Andrea Lavián at September 12, 2017 04:05 PM

    September 11, 2017

    blog de Rodolfo Pilas

    Cambiando vencimiento llave GPG

    Las llaves GPG que me identifican les coloco un vencimiento anual.

    Mi llave pública GPG en keybase

    entonces cada año en esta época debo proceder a renovar la llave, que lo que hago es correrle un año para adelante el vencimiento y vovler a sincronizar con los keyservers.

    Este es el proceso total que ejecuto:

    Buscar mi llame en mi llavero:

    $ gpg --list-keys Rodolfo
    pub   rsa2048 2014-09-07 [SC] [caduca: 2017-09-14]
          FCE66FC5849DA0F6E30DD1FCA33C4E6423B5BE7B
    uid           [  absoluta ] Rodolfo Pilas <rodolfo@>
    uid           [  absoluta ] Rodolfo Pilas <rodolfo@>
    uid           [  absoluta ] Rodolfo Pilas <rpilas@>
    uid           [  absoluta ] [jpeg image of size 4579]
    uid           [  absoluta ] [jpeg image of size 13611]
    sub   rsa2048 2014-09-07 [E] [caduca: 2017-09-14]
    

    Editar la llave:

    $ gpg --edit-key FCE66FC5849DA0F6E30DD1FCA33C4E6423B5BE7B
    
    Clave secreta disponible.
    
    sec  rsa2048/A33C4E6423B5BE7B
         creado: 2014-09-07  caduca: 2017-09-14  uso: SC
         confianza: absoluta      validez: absoluta
    ssb  rsa2048/65841C4E15CF2ADC
         creado: 2014-09-07  caduca: 2017-09-14  uso: E
    [  absoluta ] (1). Rodolfo Pilas <rodolfo@>
    [  absoluta ] (2)  Rodolfo Pilas <rodolfo@>
    [  absoluta ] (3)  Rodolfo Pilas <rpilas@>
    [  absoluta ] (4)  [jpeg image of size 4579]
    [  absoluta ] (5)  [jpeg image of size 13611]
    
    

    Está editando la key 0 o sea la que se identifica como A33C4E6423B5BE7B

    gpg> expire
    Cambiando caducidad de clave primaria.
    Por favor, especifique el per'iodo de validez de la clave.
             0 = la clave nunca caduca
          <n>  = la clave caduca en n d'ias
          <n>w = la clave caduca en n semanas
          <n>m = la clave caduca en n meses
          <n>y = la clave caduca en n a~nos
    ?Validez de la clave (0)? 1y
    La clave caduca Tue Sep 11 17:26:48 2018 -03
    ?Es correcto? (s/n) s
    
    sec  rsa2048/A33C4E6423B5BE7B
         creado: 2014-09-07  caduca: 2018-09-11  uso: SC
         confianza: absoluta      validez: absoluta
    ssb  rsa2048/65841C4E15CF2ADC
         creado: 2014-09-07  caduca: 2017-09-14  uso: E
    [  absoluta ] (1). Rodolfo Pilas <rodolfo@>
    [  absoluta ] (2)  Rodolfo Pilas <rodolfo@>
    [  absoluta ] (3)  Rodolfo Pilas <rpilas@>
    [  absoluta ] (4)  [jpeg image of size 4579]
    [  absoluta ] (5)  [jpeg image of size 13611]
    

    Ya quedo cambiada la caducidad de la llave primaria, ahora la secundaria 65841C4E15CF2ADC:

    gpg> key 1
    
    sec  rsa2048/A33C4E6423B5BE7B
         creado: 2014-09-07  caduca: 2018-09-11  uso: SC
         confianza: absoluta      validez: absoluta
    ssb* rsa2048/65841C4E15CF2ADC
         creado: 2014-09-07  caduca: 2017-09-14  uso: E
    [  absoluta ] (1). Rodolfo Pilas <rodolfo@>
    [  absoluta ] (2)  Rodolfo Pilas <rodolfo@>
    [  absoluta ] (3)  Rodolfo Pilas <rpilas@>
    [  absoluta ] (4)  [jpeg image of size 4579]
    [  absoluta ] (5)  [jpeg image of size 13611]
    
    gpg> expire
    Cambiando fecha de caducidad de subclave.
    Por favor, especifique el per'iodo de validez de la clave.
             0 = la clave nunca caduca
          <n>  = la clave caduca en n d'ias
          <n>w = la clave caduca en n semanas
          <n>m = la clave caduca en n meses
          <n>y = la clave caduca en n a~nos
    ?Validez de la clave (0)? 1y
    La clave caduca Tue Sep 11 17:27:37 2018 -03
    ?Es correcto? (s/n) s
    
    sec  rsa2048/A33C4E6423B5BE7B
         creado: 2014-09-07  caduca: 2018-09-11  uso: SC
         confianza: absoluta      validez: absoluta
    ssb* rsa2048/65841C4E15CF2ADC
         creado: 2014-09-07  caduca: 2018-09-11  uso: E
    [  absoluta ] (1). Rodolfo Pilas <rodolfo@>
    [  absoluta ] (2)  Rodolfo Pilas <rodolfo@>
    [  absoluta ] (3)  Rodolfo Pilas <rpilas@>
    [  absoluta ] (4)  [jpeg image of size 4579]
    [  absoluta ] (5)  [jpeg image of size 13611]
    

    Guardar la llave editada y salir de gpg

    gpg> save
    

    Subir la llave al keyserver, para que los cambios se repliquen

    $ gpg --keyserver pgp.mit.edu --send-keys FCE66FC5849DA0F6E30DD1FCA33C4E6423B5BE7B
    gpg: enviando clave A33C4E6423B5BE7B a hkp://pgp.mit.edu
    

    Y aprovechar a actualizar todas las demas llaves de mi llavero, pero eso ya es otra tarea.

    by pilasguru at September 11, 2017 08:48 PM

    Ruben J Garcia

    JWT en Spring Boot en 5 minutos

    Hoy traigo un articulo practico donde vamos a ver como montar un servidor JWT con Spring Boot en 5 minutos. Podeis descargar el codigo fuente de Github

    Que es JWT

    JWT o Json Web Token es un estandar abierto para crear tokens de acceso que cercioren que quien lo esta usando tiene ciertas propiedades. Por ejemplo, podemos crear un token de acceso que nos asegure que el que lo usa es un administrador del sistema

    La estructura de un token JWT se divide en 3 partes:

    • Header: Indica el algoritmo con el que se ha encriptado y el tipo. Un ejemplo seria: {"alg": "HS256","typ": "JWT"}
    • Payload: Esta es la parte donde se definen las propiedades tanto del token como del que lo esta usando. Por ejemplo: {"userid": "1234", "admin": true}
    • Signature: La ultima parte es la firma. Se concatena el header con el payload separados por un punto previamente codificados en Base 64. El resultado se encripta usando el algoritmo que hemos definido en la cabecera, en este caso HMAC-SHA256

    Una vez que tenemos las 3 partes se codifican en Base64 y cada parte se concatena con un punto. Lo que nos quedaria seria algo asi:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiWV9.PjmN-JugVug

    Montando JWT en Spring Boot

    A estas alturas no creo que haya alguien que no conozca Spring Boot. Por si no lo conoces puedes encontrar toda la informacion sobre este proyecto en su pagina web

    Gracias a Spring Boot podemos crear aplicaciones web muy rapidamente y aqui vamos a ver como con muy pocas lineas podemos tener una aplicacion con una API REST protegida mediante JWT

    Lo primero que tenemos que crear es la clase que arranca nuestro servicio

    @ServletComponentScan
    @SpringBootApplication
    public class JWTServerApplication {
    
      public static void main(String[] args) {
        SpringApplication.run(JWTServerApplication.class, args);
      }
    
      @Bean
      public FilterRegistrationBean corsFilter() {
        final CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        final FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
      }
    }
    

    Lo mas importate aqui es el bean del metodo corsFilter. Al ser un servicio REST queremos que se pueda acceder desde cualquier host y para eso hay que saltarse las restricciones CORS

    Lo siguiente es usar un filtro para interceptar las peticiones a la API y comprobar el token

    @WebFilter(urlPatterns = "/api/*")
    public class JwtFilter implements Filter {
    
      @Value("${jwt.secret}")
      private String secret;
    
      @Override
      public void init(final FilterConfig filterConfig) throws ServletException {
    
      }
    
      @Override
      public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException {
        final HttpServletRequest request = (HttpServletRequest) req;
        final HttpServletResponse response = (HttpServletResponse) res;
        final String authHeader = request.getHeader("authorization");
    
        if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
          response.setStatus(HttpServletResponse.SC_OK);
          chain.doFilter(req, res);
        } else {
    
          if (authHeader == null || !authHeader.startsWith("Bearer ")) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
          }
    
          final String token = authHeader.substring(7);
    
          try {
            final Claims claims = Jwts.parser()
                .setSigningKey(TextCodec.BASE64.encode(secret))
                .parseClaimsJws(token)
                .getBody();
            request.setAttribute("claims", claims);
          } catch (final JwtException e) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
          }
    
          chain.doFilter(req, res);
        }
      }
    
      @Override
      public void destroy() {
    
      }
    }
    

    Todas las peticiones que vayan al path /api son las que vamos a capturar siempre y cuando no sean de tipo OPTIONS. Estas peticiones no se capturan porque son las que hacen las llamadas AJAX antes de hacer la peticion real y en ellas no se envia el token. Si las capturasemos no tendriamos token y siempre serian erroneas

    El token viene en la cabecera authorization con el formato Bearer token. Lo cogemos y lo desencriptamos usando nuestro secret. Este secret se configura en el fichero application.yml de la aplicacion Spring Boot

    Si todo es correcto añadimos los claims (propiedades) como un atributo de la request que se podran coger mas tarde en el metodo del RestController. Veamos un ejemplo:

    @RestController
    @RequestMapping("/api/me")
    public class MeController {
    
      @Autowired
      private UserService userService;
    
      @RequestMapping(method = RequestMethod.GET)
      public UserJson getUser(@RequestAttribute("claims") final Claims claims) throws NotFoundException {
        return userService.getUserByEmail(claims.getSubject());
      }
    
    }
    

    Como se puede ver cogemos un @RequestAttribute("claims") donde nos vendran las propiedades, en este caso en la propiedad subject tenemos el email del usuario. Podemos definir las propiedades que queramos a la hora de crear el token. En este proyecto se hace a la hora de hacer login de la siguiente manera

    @RestController
    public class LoginController {
    
      @Value("${jwt.secret}")
      private String secret;
    
      @Autowired
      private UserService userService;
    
      @RequestMapping(value = "/login", method = RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE)
      public ResponseEntity<String> login(@RequestBody @Valid final LoginRequest login) throws ServletException {
        final boolean existUser = userService.existUser(login.getEmail(), login.getPassword());
        if (!existUser) {
          return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
        }
    
        final Instant now = Instant.now();
    
        final String jwt = Jwts.builder()
            .setSubject(login.getEmail())
            .setIssuedAt(Date.from(now))
            .setExpiration(Date.from(now.plus(1, ChronoUnit.DAYS)))
            .signWith(SignatureAlgorithm.HS256, TextCodec.BASE64.encode(secret))
            .compact();
        return new ResponseEntity<>(jwt, HttpStatus.OK);
      }
    
    }
    

    Creamos el token usando como subject el email del usuario y para mayor seguridad ponemos la hora de creacion (issuedAt) y una fecha de expiracion (expiration) y lo devolvemos al hacer login

    En el ejemplo del repositorio estan incluidos los casos de uso de login y registro asi como la persistencia de los usuarios en base de datos MongoDB. Ademas, estan todos los tests basados en BDD con Cucumber asi como el fichero Dockerfile y docker-compose para ejecutarlo como servicio independiente

    The post JWT en Spring Boot en 5 minutos appeared first on Ruben J Garcia.

    by Ruben Garcia at September 11, 2017 11:12 AM

    September 10, 2017

    debianhackers.net

    Compilando un menú global en Debian 9

    Dada mi casi insana obsesión por aprovechar al máximo los cada vez más reducidos píxeles verticales de mi pantalla (gracias, wide screen formats) siempre he admirado la idea de integrar los menús de aplicaciones en el panel superior del escritorio. Sí, a lo Mac OS, a lo Unity, preparad los tomates fanboys y haters del ciberuniverso. Sin embargo, ni utilizo software privativo ni me gusta lo más mínimo el ahora moribundo Unity. Y desafortunadamente los vastos repostorios debianitas tampoco cuentan con una alternativa viable (tenemos el topmenu plugin para XFCE y Mate, pero no funciona bien con aplicaciones GTK3). Por suerte, rilian-la-te ha escrito este pequeño applet para sacarnos del apuro. Veamos cómo instalarlo en Debian 9:

    1) Instalamos dependencias

    A pesar de que en las instrucciones del autor la lista es mucho más pequeña, yo no he sido capaz de compilar el applet sin instalar este puñado de dependencias (todas en repos):

    # aptitude install valc valac libbamf3-2 libbamf3-2-dev libbamf3-dev libgtk-3-dev openjdk-8-jdk libxfce4panel-2.0-dev libxconf-0-dev libpeas-1.0-0 dbusmenu-glib-0.4 libpeas-dev libdbusmenu-glib-dev libwnck-3-dev libxfcegui4-dev libxfce4ui-2-dev bamfdaemon libdbusmenu-gtk-dev libdbusmenu-gtk3-dev`

    Si además queremos tener soporte para aplicaciones QT:

    # aptitude install appmenu-qt

    2) Clonamos el repositorio

    Podéis crear un directorio específico o clonarlo directamente en vuestra home. Una vez dentro del directorio donde queremos clonar, tecleamos:

    $ git clone https://github.com/rilian-la-te/vala-panel-appmenu.git

    3) Descargamos los submódulos necesarios

    $ git submodule init
    $ git submodule update

    4) Creamos un directorio específico para compilar el applet

    $ mkdir build
    $ cd build

    5) Compilamos con make e instalamos

    Configuramos la compilación:

    $ cmake -DENABLE_XFCE=ON -DENABLE_JAYATANA=ON -DENABLE_UNITY_GTK_MODULE=ON -DCMAKE_INSTALL_PREFIX=/usr ..

    Donde:

    DENABLE_XFCE=ON compila la versión para el panel de XFCE4 (también existe la opción de hacerlo para Mate o para Vala Menu,

    DENABLE_JAYATANA=ON compila soporte para aplicaciones Java Swing

    DENABLE_UNITY_GTK_MODULE=ON compila el unity-gtk-module, imprescindible salvo que uses Ubuntu

    DCMAKE_INSTALL_PREFIX=/usr define donde se va a realizar la instalación

    Procedemos a la compilación e instalación:

    $ make

    # make install

    (Instalo como root porque he indicado /usr como directorio de instalación. Podéis instalarlo en cualquier otro directorio sin privilegios de superusuario).

    Tip

    Para desinstalarlo, desde el propio directorio de instalación basta con teclear:

    # xargs rm < install_manifest.txt

    6) Configuraciones post-instalación

    Editamos /etc/environment para que se ejecute appmenu-gtk-module:

    export GTK_MODULES=appmenu-gtk-module
    export UBUNTU_MENUPROXY=1

    Ocultamos los menús de las aplicaciones individuales para que se muestren en el panel de XFCE:

    $ xfconf-query -c xsettings -p /Gtk/ShellShowsMenubar -n -t bool -s true
    $ xfconf-query -c xsettings -p /Gtk/ShellShowsAppmenu -n -t bool -s true

    Añadimos el applet al panel de XFCE, reiniciamos el servidor gráfico y ¡listo!

    by Debish at September 10, 2017 11:59 AM

    September 09, 2017

    MagMax Blog

    Instalando Linux con UEFI

    Hace tiempo que me compré un ordenador nuevo, pero no lo estoy usando porque no era capaz de instalarme un sistema operativo decente de forma correcta.

    Debo decir que tiene sus triquiñuelas, pero no es difícil. En menos de 10 minutos puedes tener montado el arranque dual sin problemas.

    Así que no nos retrasemos más.

    Leer más… (quedan 2 minutos de lectura)

    by Miguel Ángel García at September 09, 2017 03:28 AM

    September 07, 2017

    ernestogamez.es

    Los mejores vinos de 2017

    El verdadero gourmet sabe que no se puede degustar una exquisitez sin el vino adecuado, pero sólo unos pocos son capaces de encontrar el caldo perfecto para cada ocasión. España es tierra de vinos y, junto a Italia y Francia, tenemos los mejores vinos a nivel mundial y esto no es algo que digamos nosotros, sino que es lo que dicen los expertos internacionales. Sin embargo, lógicamente, también tenemos creaciones mediocres, medio decentes, buenas y muy buenas antes de las excelentes, así que tenemos que saber “marca España” no tiene por qué ser sinónimo de primera calidad.

    Hace poco salió por fin la lista de los mejores vinos españoles 2017, vamos a repasarla.

    1. Porrera 2014 Vi de Vila. Hablamos de un vino con regusto a madera en un fondo frutal de marcada potencia.
    2. Alabaster 2014. Parece que ese año fue un buen año para la uva pues el número dos también tiene tres añitos a sus espaldas, como el caldo que encabeza la lista. Hablamos de un vino elegante, un tinto armonioso de cepas centenarias con un aroma mineral y un sabor de fruta roja madura y confituras.
    3. Pago Garduña 2013. Un syrah de viñedo de altura, muy delicado y goloso.
    4. Viña Pomal Vinos Singulares Graciano 2012. Como su nombre bien indica, singularidad y elaboración se combinan para dar vía libre a este vino tinto envejecido con especias y un fondo frutal equilibrado.
    5. Gran Reserva 890 2004. Y por fin un Gran Reserva, un tinto excelente clásico de estilo riojano.

    Entre estos cinco mejores vinos, sin embargo, no encontramos al más caro a nivel nacional. Se trata del AurumRed serie oro, cuya botella cuesta 17.000 euros y sólo produce 300 al año. Sin embargo, en mi opinión, aquí no sólo estás pagando la calidad, que también, sino que lo que pagas es la exclusividad del caldo y eso, queridos amigos, no tiene nada que ver con ser bueno o mejor, sino más bien con tener y poder tener.

    Vinos Económicos

    Ahora bien ¿es necesario gastar esa barbaridad de dinero para tener un buen caldo en casa? Obviamente no, ni mucho menos. Hay vinos por menos de 10 euros, incluso de 5 en algunos casos, que son excelentes y que cualquier paladar podría apreciar. Bocopa, por ejemplo, unas bodegas de las que se dice que fabrican los mejores vinos de Alicante, cuentan con tintos magníficos a partir de 10 euros y algunos más suaves, blancos, a partir de 5, aunque su joya de la corona es el Fuego Lento Magnum que viene en estuche al precio de 50 euros la botella de litro y medio.

    Otros vinos verdaderamente económicos y cuyo gusto en el paladar no te dejará indiferente son:

    • Artuke 2014. Un tinto de maceración carbónica con cepas de tempranillo y algo de viura de denominación Rioja. Precio: 5 euros.
    • Castaño 2014. Un excelente vino tinto monastrell de aromas frutales y florales por 4 euros la botella elaborado en Yecla.
    • Castro Ventosa 2014. Tinto joven con cepas de Mencía a 4,50 euros con denominación de origen del Bierzo.
    • Gómez de Segura Vendimia Seleccionada 2013. Un vino riojano tinto moderno, estilizado y fresco de sabrosa tanicidad y un recuerdo final de regaliz. Precio: 4,7 5euros.
    • Borsao Selección 2013. Del Campo de Borja nos lleva este tinto de cepas garnacha, tempranillo y algo de syrah a 4,50 euros.

    ¿Y tú, por cuál te decides?

    The post Los mejores vinos de 2017 appeared first on Ernestogamez.

    by Andrea Lavián at September 07, 2017 11:27 AM

    Ordenadores “útiles” de última generación

    Hay quien, con tal de tener lo último de lo último, se gasta un dineral poniéndose el ordenador más actual con las mejores prestaciones a pesar de que luego, en realidad, no usa ni la mitad, así que ¿para qué gastar más de lo que necesitas? Hay quien, simplemente, no entiende este concepto y piensa que comprando lo más novedoso conseguirá un producto con mayor durabilidad, y puede que tengan razón, pero no por lo que ellos piensan.

    Cuando decimos que un ordenador ha quedado obsoleto es porque las páginas web, los nuevos software y aplicaciones y los programas de última generación demandan más recursos para funcionar que los que tiene el PC en cuestión y, por eso, ya no es funcional. Lógicamente cuanta más potencia tenga, en todos los sentidos, más durabilidad tendrá puesto que por mucho que avancen o mejoren los programas o juegos virtuales, el ordenador tendrá un margen mayor aunque, al final, acabará pasando lo mismo o algo similar.

    Ahora bien, una cosa es pretender tener una buena tarjeta gráfica, una buena memoria RAM, un procesador decente y un disco duro con una tasa de transferencia lo suficientemente alta como para que cargue documentos de programas pesados a un tiempo medianamente rápido, y otra muy diferente es querer tener en casa el ordenador de la NASA porque, lógicamente, no vas a usar ni la mitad de las prestaciones que tiene y te habrás gastado un dineral que acabará en la basura: se te romperá mucho antes de que le hayas sacado el partido suficiente.

    A día de hoy ¿quién gasta los ordenadores más potentes a nivel particular? Pues es sencillo, diseñadores, gamers y profesionales. Veamos qué tipo de PC´s son los que realmente resultan interesantes para estos tres sectores.

    Gamers

    Los “Gamers” necesitan ordenadores de sobremesa (olvidaos de los portátiles) con un procesador potente y una gráfica mejor aún. Tened en cuenta que los juegos virtuales, y no tan virtuales, cada vez tienen mejores gráficos y van a mayor velocidad así que el ordenador con el que se pretenda jugar debe soportar todo eso y más.  WhatsPC tiene ordenadores gaming baratos que no están nada mal y si quieres algo más potente puedes recurrir a los “Ultra gaming” que ya suben un poco de precio pero siguen siendo asequibles.

    Diseñadores

    Probablemente son los que más vayan a usar ciertas prestaciones pero ni por esas van a usar a tope  el Pc más potente del mundo, el OrionX que cuesta 28.000 euros. Con él un gamer podría vivir experiencias increíbles, si no fuera porque aún no existen juegos tan potentes que lleguen a utilizar todas las prestaciones del OrionX. En gráfica cuenta con tres nVidia Geforce Titan X en paralelo y cuenta con espacio para instalar una cuarta. El procesador es un i-7-6950X de diez núcleos, cuenta con 13 teras de memoria interna que pasa datos a 2 gigas por segundo y con 64 gigas de RAM a 2660MHz. En pocas palabras: todo un pepinazo.

    Profesionales

    Hoy en día todos necesitamos de un ordenador en algún momento del día, o de la semana, o del mes. Da igual cómo te lo montes pero, sea como sea, el ordenador vas a usarlo, sí o sí. Los profesionales del comercio suelen pensar que con uno de gama media, para lo que ellos lo usan, es suficiente, pero la realidad es que hay equipos que están pensados por y para ellos, que ya no sólo por las prestaciones son mejores sino también por los software que incorporan. Hablamos de los conocidos TPV (Terminal Punto de Venta) que no hace mucho tiempo eran sólo cajas registradoras digitalizadas y que hoy en día te permiten realizar trabajos tipo facturación y logística. En tpvdata.com cuentan con los mejores modelos, adaptados a todos los bolsillos.

    Lo mires por donde lo mires la conclusión será siempre la misma: adapta tu ordenador a lo que realmente necesites, no gastes más de lo que vayas a usar y no pretendas que te dure 20 años, eso no es realista.

    The post Ordenadores “útiles” de última generación appeared first on Ernestogamez.

    by Andrea Lavián at September 07, 2017 09:41 AM

    September 06, 2017

    ernestogamez.es

    Los nuevos catálogos de muebles ya están aquí

    Siempre que algo ha creado tendencia ha tenido una larga lista de seguidores, es inevitable. Es como si por el mero hecho de que alguien dijera que está de moda ya tuviera que gustarnos. Luego, al mismo tiempo, aparecen las réplicas, las líneas similares e incluso lo que es totalmente opuesto, porque también hay gente que con tal de llevar la contraria al resto del mundo dice que le gusta justo lo que se contrapone a lo que está de moda. Así, cuando el blanco es tendencia hay quienes siguen ese color a pies juntillas, quienes optan por los beiges o crudos y blancos rotos para ser un poco distintos, y quienes (para llevar la contraria) eligen el negro.

    Así ha sido toda la vida y así seguirá siendo. Por eso, cuando una línea decorativa es tendencia, ya sabemos que habrá copias o líneas similares con pequeños cambios y también una línea que parecerá ser todo lo contrario. Actualmente parece que la moda está en lo vintage y rústico así que, si vemos las principales líneas de decoración en catálogos de muebles comprobaremos que tenemos mucho de eso y mucho de lo contrario, es decir, de mueble moderno.

    El catálogo de Ikea, el esperadísimo catálogo diría yo, llegó a nuestros hogares la semana pasada y, tal y como era de esperar, siguen está norma no escrita, lo que convierte a esta marca de muebles suiza en una más, como todas las demás. Para colmo, Ikea ya no es tan económica como en un principio pretendía ser y la calidad de sus materiales dependen mucho de lo que estés dispuesto a pagar así que, al final, no es tan diferente a otras tiendas así que nosotros, para llevar la contraria a la moda del catálogo Ikea, vamos a ver otros catálogos que no desmerecen en nada a la imponente firma.

    Dismobel

    El nuevo catálogo de Dismobel, tal y como nos tiene acostumbrados su línea de muebles, no está pensado para aquel que busca precio sino más bien para el que busca diseño y exclusividad. Hablamos de un tipo de mueble de madera tratada de gran calidad con diseños exclusivos de la firma cuyo precio, sin ser prohibitivo, es relativamente elevado.

    Entre sus novedades destaca su colección Royal, de madera oscura, que recuerda mucho a los muebles de los ochenta con cierto toque rústico. Tampoco podemos olvidar la línea de muebles Devina Nais, de fabricación artesanal, donde el acabado es impoluto y las líneas impecables.

    Círculo Muebles

    Son más de 60 comercios repartidos por toda España los que forman la familia de Círculo Muebles. Lo bueno de recurrir a ellos es que es fácil acceder físicamente a sus comercios y, por lo tanto, no sólo podemos analizar el producto a través de su web sino que, además, podemos verlos in situ. En su nuevo catálogo predomina el color blanco, algo que no nos sorprende pues parece que otra de las tendencias que va a seguir en pleno auge es el mueble de estilo nórdico, de líneas rectas, sencillas y color blanco con matices rústicos o vintage.

    Con respecto al precio es importante saber que esta cadena de tiendas tiene promociones muy apetecibles. Sus muebles no son excesivamente económicos pero la calidad y el diseño de los mismos merecen la pena.

    Muebles Saez

    Esta tienda de muebles ubicada en Utiel, Requena, es una de las últimas que ha decidido ampliar su horizonte teniendo presencia en Internet. Esto, a priori, podría significar que el precio de sus productos se ha visto incrementado para poder hacer frente a la inversión que supone una tienda online pero, sin embargo, mantiene sus precios de exposición física tanto en su tienda de Requena como en su tienda online, la cual podemos visitar en mueblessaez.es, lo que es un plus a su favor ya que, no sólo tienen calidad sino que también tiene precios muy competitivos.

    Lógicamente, en su catálogo, no vamos a encontrar el diseño de un conocidísimo y afamado decorador pero cuenta con una amplia gama de series de muebles cuya relación calidad-precio merece la pena tener en cuenta. La composición CREA 20 es una de las mejores, pero si buscáis algo más económico podemos encontrar composiciones de comedor desde 250 euros.

    Visto lo visto os puedo asegurar que el número de “originalidades” en los muebles es muy poco. De hecho se puede jugar a marcar las diferencias entre algunos modelos de Ikea y otras tiendas así que, sea tendencia o no, probablemente la decisión más acertada es optar por tonos neutros con un mobiliario sencillo, sin demasiados aspavientos, que no pase de moda.

    The post Los nuevos catálogos de muebles ya están aquí appeared first on Ernestogamez.

    by Andrea Lavián at September 06, 2017 03:14 PM

    September 03, 2017

    joseangelfernandez.es

    Ejecutando múltiples veces CustomScriptExtension en una máquina Windows en Azure

    Es posible que en alguna ocasión hayáis necesitado ejecutar más de un script de configuración en una máquina virtual con Windows Server 2012 R2 en Azure en diferentes momentos de su aprovisionamiento. Si habéis intentado realizarlo desplegando la extensión Custom Script lo más probable es que recordéis un mensaje como el siguiente:

    me@Azure:~$ az group deployment create --name deploy --resource-group jangelfdez-blog --template-file /home/me/clouddrive/main.simplevm.json --verbose
    [...]
    Failed: secondInstallation (Microsoft.Compute/virtualMachines/extensions)
    Failed: deploy (Microsoft.Resources/deployments)
    Succeeded: firstInstallation (Microsoft.Compute/virtualMachines/extensions)
    Deployment failed. {
      "error": {
        "code": "BadRequest",
        "message": "Multiple VMExtensions per handler not supported for OS type 'Windows'. VMExtension 'secondInstallation' with handler 'Microsoft.Compute.CustomScriptExtension' already added or specified in input."
      }
    }
    

    Esta salida se corresponde con la siguiente plantilla de ARM. Está basada en la disponible en el repositorio de Azure y únicamente le he añadido la parte de las extensiones. En ambas intento ejecutar un comando en línea de PowerShell que escriba algo a la salida estándar.

    [
    {
      "type":"Microsoft.Compute/virtualMachines/extensions",
      "name":"[concat(variables('vmName'), '/firstInstallation')]",
      "apiVersion":"2016-03-30",
      "location":"[resourceGroup().location]",
      "dependsOn":[
      "[variables('vmName')]"
      ],
      "properties":{
        "publisher":"Microsoft.Compute",
        "type":"CustomScriptExtension",
        "typeHandlerVersion":"1.8",
        "autoUpgradeMinorVersion":true,
        "settings":{
          "fileUris":{
          },
          "commandToExecute":"powershell.exe -Command 'Write-Output First"
          },
          "protectedSettings":{
          }
      }
    },
    {
      "type":"Microsoft.Compute/virtualMachines/extensions",
      "name":"[concat(variables('vmName'), '/secondInstallation')]",
      "apiVersion":"2016-03-30",
      "location":"[resourceGroup().location]",
      "dependsOn":[
        "[variables('vmName')]"
      ],
      "properties":{
        "publisher":"Microsoft.Compute",
        "type":"CustomScriptExtension",
        "typeHandlerVersion":"1.8",
        "autoUpgradeMinorVersion":true,
        "settings":{
          "fileUris":{
          },
          "commandToExecute":"powershell.exe -Command 'Write-Output Second'"
          },
          "protectedSettings":{
        }
      }
    }
    ]

    Si revisamos el log disponible en C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.9 veremos que se interpreta correctamente nuestro comando de la primera extensión. Sin embargo, como indicaba el log de despliegue, de la segunda no hay rastro.

    [INFO] Waiting for all async file download tasks to complete...
    [INFO] Files downloaded. Asynchronously executing command: 'powershell.exe -Command 'Write-Output First''
    [INFO] Command execution task started. Awaiting completion...
    [INFO] Command execution finished. Command exited with code: 0
    

    Esto se debe a que no es posible instalar esta extensión dos veces sobre una máquina virtual con Windows Server 2012 R2. Si probáis con Windows Server 2016 observaréis que no sucede lo mismo, en esta versión sí que permite instalar dos veces una extensión.

    Antes de probar con otras alternativas como dejar una tarea de Windows programada o buscar algún sistema de gestión de la configuración externo como PowerShell DSC, Puppet o Chef estuve rebuscando en la documentación y encontré lo siguiente.

    Es posible ejecutar la instalación de la misma extensión varias veces con diferentes comandos empleando el parámetro timestamp. Sin embargo, no es algo evidente. La documentación de la extensión para Windows no está actualizada a la última versión; tienes que descubrirlo en la documentación para la extensión sobre Linux o revisando el repositorio de GitHub.

    Para ello será necesario definir la primera ejecución de la extensión en la plantilla inicial y ,posteriormente, definir la segunda ejecución en otra nueva plantilla en la que se debe añadir la variable de timestamp en el apartado de settings. La propiedad admite un valor numérico en formato entero que no tiene por qué corresponderse con el momento en el tiempo actual. Finalmente será necesario actualizar el comando que se desea ejecutar.

    Al tener una segunda plantilla que desplegar esto se puede hacer de dos formas: hacer dos despliegues o emplear los despliegues anidados. Asumiremos la primera, la segunda podéis encontrar más información en la documentación

    Nuestra segunda plantilla contendrá lo siguiente únicamente:

    [
    {
      "type":"Microsoft.Compute/virtualMachines/extensions",
      "name":"[concat(variables('vmName'), '/firstInstallation')]",
      "apiVersion":"2016-03-30",
      "location":"[resourceGroup().location]",
      "dependsOn":[
        "[variables('vmName')]"
      ],
      "properties":{
        "publisher":"Microsoft.Compute",
        "type":"CustomScriptExtension",
        "typeHandlerVersion":"1.8",
        "autoUpgradeMinorVersion":true,
        "settings":{
          "fileUris":{
          },
          "commandToExecute":"powershell.exe -Command 'Write-Output Second'",
          "timestamp": 10000
          },
          "protectedSettings":{
          }
        }
    }
    ]

    Ya solo queda desplegarla y volver a mirar el log de la extensión; en él veremos que se han añadido nuevas filas que contienen la recepción de nuestro nuevo comando modificado.

    [INFO] Waiting for all async file download tasks to complete...
    [INFO] Files downloaded. Asynchronously executing command: 'powershell.exe -Command 'Write-Output Second''
    [INFO] Command execution task started. Awaiting completion...
    [INFO] Command execution finished. Command exited with code: 0
    

    Esta opción simplifica el proceso pudiendo trabajar directamente con plantillas de ARM y evitando incluir así otra alternativa externa.

    by jafernandez at September 03, 2017 08:01 PM

    September 02, 2017

    # rm-rf.es

    OVFTOOL – Error: OVF Package is not supported by target – Unsupported hardware family ‘virtualbox-2.2’

    Los siguientes errores se pueden presentar al tratar de importar con ovftool (VMware) una OVA exportada desde Virtualbox:

    Error: OVF Package is not supported by target:
     - Line 25: Unsupported hardware family 'virtualbox-2.2'.
    
     - Line 83: OVF hardware element 'ResourceType' with instance ID '7': No support for the virtual hardware device type '35'.
    

    Antes de importar este tipo de OVAs, hay que tener en cuenta que determinados dispositivos de hardware virtuales (controladoras SCSI, tarjetas virtuales de audio, etc) deben ser modificadas a formato VMware para evitar los errores citados.

    En primer lugar se debe desempaquetar el contenido del archivo ova para manipularlo:

    # ovftool --lax foo.ova foo.ovf

    En segundo lugar se debe modificar la controladora de discos virtuales de tipo virtualbox-2.2 a vmx-07, así como su tipo (sataController en Virtualbox y SCSIController en Virtualbox). Toda esta configuración se encuentra en el archivo .ovf:

    Virtualbox:

    <Item>
    <rasd:Address>0</rasd:Address>
    <rasd:Caption>sataController0</rasd:Caption>
    <rasd:Description>SATA Controller</rasd:Description>
    <rasd:ElementName>sataController0</rasd:ElementName>
    <rasd:InstanceID>5</rasd:InstanceID>
    <rasd:ResourceSubType>AHCI</rasd:ResourceSubType>
    <rasd:ResourceType>20</rasd:ResourceType>
    </Item>

    VMware:

    <Item>
    <rasd:Address>0</rasd:Address>
    <rasd:Caption>SCSIController</rasd:Caption>
    <rasd:Description>SCSI Controller</rasd:Description>
    <rasd:ElementName>SCSIController</rasd:ElementName>
    <rasd:InstanceID>5</rasd:InstanceID>
    <rasd:ResourceSubType>lsilogic</rasd:ResourceSubType>
    <rasd:ResourceType>6</rasd:ResourceType>
    </Item>

    Respecto a la tarjeta de audio y/o cualquier otro hardware no soportado en VMware (o que directamente no queramos utilizar en destino), eliminamos su bloque <item>en el archivo de configuración. Ejemplo:

    <Item>
    <rasd:AddressOnParent>3</rasd:AddressOnParent>
    <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
    <rasd:Caption>sound</rasd:Caption>
    <rasd:Description>Sound Card</rasd:Description>
    <rasd:ElementName>sound</rasd:ElementName>
    <rasd:InstanceID>6</rasd:InstanceID>
    <rasd:ResourceSubType>ensoniq1371</rasd:ResourceSubType>
    <rasd:ResourceType>35</rasd:ResourceType>
    </Item>
    

    Antes de importar la máquina virtual se debe recalcular el HASH del archivo de configuración, ya que va referenciado en el archivo .mf, antes hay que revisar si es SHA1, SHA256, etc:

    # sha256sum foo.ovf
    27d376d2b93914c94d0adab5fccd4a04e31bc136ca6a11da46d8029447e76056  foo.ovf
    
    # head foo.mf
    SHA256(foo.ovf)= 27d376d2b93914c94d0adab5fccd4a04e31bc136ca6a11da46d8029447e76056
    

    Finalmente importamos la máquina virtual:

    # ovftool --disableVerification --acceptAllEulas --noSSLVerify --datastore=storage_01 --network="VM Network" foo.ovf vi://root@10.0.1.125

    by Alex at September 02, 2017 09:24 AM

    August 28, 2017

    blog de Rodolfo Pilas

    LXC en Debian con Ansible

    Desde antes del 2013 vengo insitiendo con las ventajas de los containers en Linux, ya que permiten un rápido despliegue de muchos sistemas Linux corriendo en forma independiente.

    En 2014 había hecho experiencias para tener con una máquina virtual de DigitalOcean muchos contenedores Linux instalados y prestando servicios y en 2016 tuve la oportunidad de compartir en forma práctica con la comunidad de Paysandú un ejemplo de uso de contenedores.

    Hace unos meses atrás armé un perfil de vagrant (Vagrantfile) que permite levantar una máquina virtual con Debian e instalar (aprovisionar) un servidor de contenedores LXC, y un primer contenedor de pruebas.

    Este artículo tiene por objetivo, compartir esa configuración, para que la pueda usar quién desee.

    Repositorio: debian-lxc-ansible

    El aprovisionamiento se realiza mediante Ansible, por lo que es fácil de parametrizar y adaptar.

    Una vez levantado el primer contenedor (que ya queda en el aprovisionamiento inicial, luego de correr vagrant up) es muy fácil levantar más contenedores con los comandos normales.

    También, en el directorio /vagrant/utils se entregan scripts (requieren revisión y adaptación a la instalación particular) que sirven cómo muestra de cómo levantar containers para producción:

    a) Levantar un container con sitio web funcional

    /vagrant/utils/create-container.sh name
    

    b) Borrar el container creado con el script anterior

    /vagrant/utils/destroy-container.sh name
    

    c) Crear una página web para ver el status de los containers a través de web en el servidor lxc

    /vagrant/utils/status.sh
    

    Toda esta instalación, obviamente puede ser modificada y mejorada. Si desean compartir sus mejoras conmigo lo pueden hacer a través de Merge Request.

    by pilasguru at August 28, 2017 06:02 PM

    August 24, 2017

    Poesía Binaria

    Cómo actualizar el firmware del ESP8266 manualmente


    Tanto si lo que queremos es tener la última versión del software, rescatar un chip que creíamos perdido o programar nuestro chip con una versión propia. Nos viene muy bien hacer la reprogramación de nuestro ESP8266 y en este post veremos los pasos básicos para hacerlo.

    Son mediados de agosto de 2017, el post no será muy largo 🙂

    Conexión con adaptador USB

    Tenemos que tener en cuenta los pins de nuestro ESP8266 y tener localizados GPIO0 y GPIO2 que son los pins que usaremos para entrar en modo programación. en este caso GPIO0 lo pondremos a nivel bajo (0V) y GPIO2 a nivel alto (3.3V). Esto lo vemos aquí.
    Representaré en el diagrama la conexión con un adaptador USB-UART. Si queréis ver cómo se conectaría un Arduino, podéis verlo en el anterior post.

    Como vemos, el único que dejamos sin conectar es el RESET.

    Tenemos que tener en cuenta que el modo programación sólo funciona si arrancamos el chip con esta configuración. Es más, una vez arrancado el programa, GPIO0 y GPIO2 pueden tener los valores que quieran.

    Herramienta para programar

    Vamos a hacer la programación con la herramienta esptool, hecha en Python. Que podemos descargarla desde GitHub,o instalarla directamente con:

    pip install esptool

    Descargando el firmware

    Podemos descargar el firmware precompilado desde el GitHub de espressif. Ahí veremos varios archivos:

    • boot_vxxx.bin : Arranque
    • at/512+512/user1.1024.new.2.bin : Software
    • at/512+512/user1.1024.new.2.bin : Software
    • esp_init_data_default : Inicialización de datos por defecto
    • blank.bin : Todo lleno de unos, para tener el chip limpio de valores salvados y demás.

    Subiendo el firmware

    Para ello tenemos que tener en cuenta el dispositivo que tenemos. Por ejemplo el ESP8266-01 es de 8Mbit, o 1Mb. Aunque el ESP-12E, por ejemplo tiene 4Mb. Incluso con un poco de maña se puede sustituir el chip de memoria por uno más grande. Por lo que debemos mirar las direcciones de memoria que escribiremos.
    El arranque (boot) siempre irá en la 0x00000 (lo primero que nos encontramos), y el software irá a partir del 0x01000. Lo importante es la configuración y los datos de usuario que suele ir al final de la memoria, como vemos aquí.

    Para proceder, estos fueron los comandos que yo ejecuté en mi caso.
    boot_v1.7.bin:

    ./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0x0000 ../boot_v1.7.bin
    esptool.py v2.1-beta1
    Connecting….
    Chip is ESP8266
    Uploading stub…
    Running stub…
    Stub running…
    Configuring flash size…
    Auto-detected Flash size: 1MB
    Flash params set to 0x0020
    Compressed 4080 bytes to 2936…
    Wrote 4080 bytes (2936 compressed) at 0x00000000 in 0.3 seconds (effective 126.5 kbit/s)…
    Hash of data verified.
    Leaving…
    Hard resetting…

    user1.1024.new.2.bin:

    ./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0x1000 ../user1.1024.new.2.bin
    esptool.py v2.1-beta1
    Connecting….
    Chip is ESP8266
    Uploading stub…
    Running stub…
    Stub running…
    Configuring flash size…
    Auto-detected Flash size: 1MB
    Compressed 427060 bytes to 305755…
    Wrote 427060 bytes (305755 compressed) at 0x00001000 in 26.4 seconds (effective 129.4 kbit/s)…
    Hash of data verified.
    Leaving…
    Hard resetting…

    esp_init_data_default.bin:

    ./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0xfc000 ../esp_init_data_default.bin
    esptool.py v2.1-beta1
    Connecting….
    Chip is ESP8266
    Uploading stub…
    Running stub…
    Stub running…
    Configuring flash size…
    Auto-detected Flash size: 1MB
    Compressed 128 bytes to 75…
    Wrote 128 bytes (75 compressed) at 0x000fc000 in 0.0 seconds (effective 84.9 kbit/s)…
    Hash of data verified.
    Leaving…
    Hard resetting…

    blank.bin:

    ./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0xfe000 ../blank.bin
    esptool.py v2.1-beta1
    Connecting….
    Chip is ESP8266
    Uploading stub…
    Running stub…
    Stub running…
    Configuring flash size…
    Auto-detected Flash size: 1MB
    Compressed 4096 bytes to 26…
    Wrote 4096 bytes (26 compressed) at 0x000fe000 in 0.0 seconds (effective 3935.1 kbit/s)…
    Hash of data verified.
    Leaving…
    Hard resetting…
    ./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0x7e000 ../blank.bin
    esptool.py v2.1-beta1
    Connecting….
    Chip is ESP8266
    Uploading stub…
    Running stub…
    Stub running…
    Configuring flash size…
    Auto-detected Flash size: 1MB
    Compressed 4096 bytes to 26…
    Wrote 4096 bytes (26 compressed) at 0x0007e000 in 0.0 seconds (effective 3919.7 kbit/s)…
    Hash of data verified.
    Leaving…
    Hard resetting…

    Lo malo, es que cada vez que subo un archivo tengo que cortar la corriente y volver a alimentar el dispositivo para volver a entrar en modo programación.

    La prueba

    Una vez completado el proceso, podemos pedir información a nuestro ESP8266 conectando con el puerto serie (115600 baudios por defecto) y pidiendo:

    AT+GMR
    AT version:1.4.0.0(May  5 2017 16:10:59)
    SDK version:2.1.0(116b762)
    compile time:May  5 2017 16:37:48
    OK

    Y, como vemos, ya tengo una versión mucho más nueva en el chip.

    The post Cómo actualizar el firmware del ESP8266 manualmente appeared first on Poesía Binaria.

    by Gaspar Fernández at August 24, 2017 11:48 PM

    August 23, 2017

    Poesía Binaria

    Foto: Chuleta de atajos de teclado de Emacs

    Chuleta de Emacs

    Estos días atrás he estado publicando fotografías casi diarias en mi cuenta de Instagram sobre electrónica, piezas de mi museo personal de hardware o de informática. Hoy tocaba poner una fotografía de algo que lleva tiempo conmigo, una chuleta de teclas rápidas para Emacs. Con la que podemos realizar algunas de las acciones más comunes sin levantar los dedos del teclado. Aunque parece difícil, en poco tiempo te familiarizas con ella y ya te sale solo. Hace mucho tiempo publiqué un post con algunos de los atajos de teclado que más utilizaba, aunque en unos días publicaré algunos posts más sobre configuración de este programa.

    La foto no muestra la guía completa, es sólo por publicar el detalle de foto vieja de la historia de la informática, corresponde a la versión 21 de Emacs que salió en 2001 y la guía es de 2002 (porque cuando algo tiene 15 años en este mundo, creo que puede ser considerado viejo, vintage o antiguo). Si quieres una guía actualizada puedes descargarla desde aquí. Y si la quieres en formato físico, siempre puedes adquirir la guía de referencia de Emacs donde suele venir esta tarjeta de referencia.

    Como soy un paranoico, aunque está muy bien utilizar Instagram para llegar a más gente, quiero ir pasando todas las fotos al blog, un lugar donde, al menos, yo controlo la información que está copiada. Y, si por algún casual, Instagram cierra, se queman los datacenters, o les da por poner una marca de agua, aquí tendremos la fuente original y libre de las mismas. Además, si quiero contar una larga historia sobre las fotos, poner enlaces para quien quiera conocer algo más o utilizar algún plugin para documentarlo, la historia está más segura aquí.

    The post Foto: Chuleta de atajos de teclado de Emacs appeared first on Poesía Binaria.

    by Gaspar Fernández at August 23, 2017 04:43 PM

    August 21, 2017

    # rm-rf.es

    Renovar certificados SSL de StoneGate Management Center (SMC)

    Antes de que expire el certificado SSL instalado en el centro de control de StoneGate, se recibe la siguiente alerta avisando de que está a punto de caducar:

    StoneGate alert "System alert" was raised at 2017-04-10 00:00:00.
    Situation: Management Server: Certificate check for Log Server
    Severity: High
    Message: Management Server: Certificate check for Log Server
    Log Server's certificate expires in less than 90 days. Run the sgCertifyLogSrv script on the Log Server to create a new certificate.
    Sender: Management Server
    
    This is an alert message sent by StoneGate Management Center.
    

    En el caso de que se trate de un certificado adquirido a una entidad (Verisign, Comodo, etc) será necesario iniciar el proceso de renovación correspondiente. En estos casos, lo más habitual es que se trate de un certificado autofirmado, es decir, generado por el propio SMC. Los pasos para proceder a su renovación son los siguientes:

    Parar el servicio de stonegate:

    # su - sgadmin
    -bash-4.1$ cd /usr/local/stonesoft/management_center/bin
    -bash-4.1$ ./sgStopMgtSrv.sh
    Stopping Stonesoft Management Server: 
    ....
    

    Ejecutar el script que renueva el certificado SSL:

    -bash-4.1$ ./sgCertifyMgtSrv.sh
    -nodisplay not used and graphic mode not available
    Graphical mode requested but not available. use option -nodisplay to start in console mode.
    -bash-4.1$ ./sgCertifyMgtSrv.sh -nodisplaystone
    Running in console mode
    Starting Primary Management Server certification
    Management Server Certification.
    
    Management Server has been successfully re-certified.
    

    Iniciar el SMC una vez finalizados los trabajos:

    -bash-4.1$ ./sgStartMgtSrv.sh &

    Las mismas acciones se deben llevar a cabo para renovar el certificado del log server en SMC:

    -bash-4.1$ ./sgStopLogSrv.sh
    Stopping Stonesoft Log Server: 
    
    -bash-4.1$ ./sgCertifyLogSrv.sh -nodisplay
    Running in console mode
    This component needs to contact the management server to get its certificate.
    login: admin
    password: 
    
    domain(optional):
    Trying to connect Management Server at following addresses:
    192.138.3.10
    
    Connected Management Server: 192.138.3.10
    1: Create a new Log Server
    2: Certify again Log Server named: "LogServer 192.138.3.10" (192.138.3.10) (recommended)
    3: Cancel
    2
    Creating certificate request. Please wait.....
    The certificate of this Log Server has been regenerated.
    -bash-4.1$ ./sgStartLogSrv.sh &
    [2] 18738
    -bash-4.1$ Stonesoft Management Center 6.0.0 [10116]
    Copyright 2000-2016 Forcepoint LLC. All rights reserved.
    http://www.forcepoint.com
    
    Starting Log Server...
    Log Server started.
    

    by Alex at August 21, 2017 02:35 PM

    Poesía Binaria

    Gráficos híbridos en GNU/Linux. Nvidia + Intel, poco a poco vamos avanzando.

    Hace 6 años escribí un post con mi indignación acerca de los gráficos híbridos. Es decir, cuando un portátil o un sobremesa tiene dos chips gráficos. Normalmente, uno malillo, que puede ser un Intel, integrado en el procesador (aunque últimamente no son tan malillos) y uno mucho mejor, que puede ser un Nvidia o ATI que, sobre todo, para el procesamiento 3D o para aplicaciones GPGPU va a funcionar mucho mejor.

    La semana que viene, publico un post con una guía para instalar Bumblebee con algunos detalles sobre problemas que me he encontrado con mi hardware y cómo lo solucioné.

    Resumiendo un poco. Los chips se han abaratado muchísimo, y la tendencia desde hace unos años es reducir el consumo energético de los dispositivos. Así que muchos ordenadores nuevos (sobre todo portátiles, que deberían tener la mayor autonomía posible) tienen una GPU integrada dentro de la CPU. Ese chip gráfico funciona muy bien para gráficos 2D y le puedes pedir también que pinte cosas en 3D. Hace años, la capacidad 3D era muy limitada, aunque ahora es bastante decente, pero no alucinante. Eso sí, cuando te compras un equipo, puedes hacerlo con una gráfica dedicada que puede ser una Nvidia o una ATI, marcas que han demostrado tener gráficas muy potentes. Así que, la idea es tener la GPU dedicada (llamémosle discreta, en el sentido de separada) dormida siempre que sea posible, porque nada más alimentar y tener activa esta GPU va a consumir mucha energía. Por lo tanto, sólo la encenderemos cuando vayamos a hacer algo pesado y la GPU integrada no sea suficiente, es decir, cuando estemos tirando de juegos, procesamiento 3D, etc. Porque la GPU integrada no nos va a proporcionar la calidad que necesitamos ni los fps que requerimos.

    El principio de los principios

    La teoría es perfecta. Es todo fantástico y maravilloso. Al principio, la implementación era por BIOS. Cuando querías utilizar la tarjeta integrada (digamos, la Intel), entrabas, elegías que querías la Intel, iniciabas el sistema operativo y cuando querías utilizar la discreta, reiniciabas, entrabas en BIOS, elegías la otra y arrancabas de nuevo. El problema es que reiniciar da una pereza tremenda. Así que al final dejas siempre encendida la discreta y listo, ya no hay ahorro de energía.

    Por cierto, según he leído, aún hay BIOS actuales que te dejan activar y desactivar la tarjeta discreta. Con alguna que otra manera de hacer ahorro energético. Incluso algunas BIOS actuales te dejan elegir a qué gráfica va conectada la salida a monitor. Ya veremos cómo eso es interesante.

    Nvidia Optimus

    Desde 2010, Nvidia sacó una tecnología para no tener que estar reiniciando todo el tiempo y que teóricamente podías tener aplicaciones corriendo con la tarjeta Intel y al mismo tiempo en alguna ventana podría haber gráficos tirando de la GPU Nvidia que estará sólo trabajando en esa región de la pantalla y durante el tiempo que está la aplicación funcionando. Mientras, la Nvidia se desactiva y no consume corriente. Así conseguimos ahorrar energía y, si no estamos haciendo nada muy potente, la gráfica pesada no funcionará, estaremos siendo más eficientes energéticamente, el ordenador se calentará menos, los ventiladores irán más despacio y si estamos con batería, ésta durará más.

    Lo malo fue la implementación inicial. Hasta en Windows daba problemas, se podía colgar al arrancar o apagar la gráfica, aunque con el tiempo lo terminaron solucionando y no va mal del todo.

    Nvidia + GNU/Linux

    El problema vino con GNU/Linux. Aunque teníamos el driver privativo de Nvidia, que sigue siendo el que mejor funciona. La empresa no facilitó soporte para Optimus, ni pensaban implementarlo a corto plazo (aunque la noticia es de 2011, a estas fechas, 21 de Agosto de 2017 no hay una implementación a nivel de Windows).

    ¿Qué hacemos? A día de hoy tenemos varias posibilidades. Tenemos el driver libre nouveau, que sigue en desarrollo activo. Pero aún queda mucho por hacer, no es lo suficientemente estable con modelos nuevos de las gráficas Nvidia o con procesadores Intel muy nuevos. Aunque, gracias al driver nouveau y a algunos módulos del kernel, nos dejarán activar o desactivar la gráfica. El problema es que tienes que tener suerte, que coincida y funcione en tu equipo y con tu configuración, además de que, aunque el driver nouveau está muy bien, y es libre, hay cosas que no funcionan y tiene un rendimiento menor, pero es capaz de conmutar entre la tarjeta integrada y la discreta.

    Nvidia Prime

    Nvidia sacó Prime. Puede conmutar entre la tarjeta discreta y la integrada, es decir, entre Nvidia e Intel, pero funcionará a nivel de sistema, para toda la pantalla. Y si queremos cambiar entre una y otra tarjeta tendremos, mínimo, que cerrar la sesión y volvera a abrirla para cambiar el driver que controla la pantalla, el sistema OpenGL, etc. El problema no es sólo de Nvidia, es cómo está planteado Xorg, porque hace mas de 25 años, supongo que no se imaginaron que en el futuro se iba a hacer esto. Por si fuera poco, algunas veces el módulo de Nvidia no se lleva bien con algunas tarjetas, o, por algún problema la gestión de energía no va bien cuando haces el cambio… por lo que al final, resulta más seguro reiniciar el ordenador. Aunque el problema no es sólo Prime, o reiniciar, es cómo están enchufadas las gráficas. Esto puede ser complicado, el caso es que una de las configuraciones más utilizadas es que la gráfica discreta está conectada a la interna y ésta a la salida; hay más elementos en la ecuación, lo importante es que cuando la tarjeta discreta está activa hay opciones de monitor que no funcionan (además, los nombres de las pantallas son muy raros… HDMI-1-1, HDMI-1-2…). Mi principal problema surgió con la rotación de pantalla. Nvidia soporta rotación, Intel soporta rotación, pero cuando están las dos juntas, no hay rotación de pantalla. Por otro lado, al final terminas siempre utilizando la tarjeta discreta (porque para eso te la has comprado) y no ahorramos energía.

    Luego tenemos el proyecto Bumblebee. Lo malo es que hay forks, de varias personas, guías contradictorias y características que van y vienen. Lo de las guías contradictorias no es problema de quién las escribe, la semana que viene publico yo una, es porque al tener características que van y vienen, configuraciones que dejan de servir y máquinas que no siempre son compatibles con según qué cosas, al final toca probar y, tirar mucho de terminal, y arrancar el ordenador totalmente a oscuras y rehacer configuraciones… Y hablaremos un poco más de él.

    Usar solo la Intel

    Bueno, es una opción. Ignoramos por completo que tenemos la tarjeta Intel y, utilizando el módulo del kernel que mejor nos funcione: bbswitch o vga_switcheroo. Desactivamos la tarjeta discreta para siempre. Aunque claro, tu ordenador tiene una tarjeta discreta que va a estar muerta de risa todo el tiempo, y da pena no utilizarla.

    Podríamos, por ejemplo, cargar el módulo de nvidia y activar la tarjeta discreta a mano cuando queramos hacer algún procesamiento GPGPU, utilizando CUDA u OpenCL. Aunque algunos programas, antes de utilizar estas tecnologías, preguntan al servidor X qué tarjeta tienes y, claro, el servidor X les va a decir que tienes una Intel y no van a hacer uso del driver de Nvidia. Otros programas mejor hechos sí que detectan que tenemos una nvidia, el módulo funcionando y hacen el procesamiento GPGPU sin problema. Una vez hecho esto, puedes desactivar la tarjeta discreta y listo.

    Bumblebee

    Bumblebee, supuestamente, nos trae el mundo maravilloso de Optimus a GNU/Linux. Aunque tampoco es tan maravilloso, es una solución muy válida para nuestros equipos, por el momento, mientras Nvidia saca un mejor soporte de Optimus, mientras nouveau alcanza un rendimiento y estabilidad mayor o mientras las GPU de Intel alcanzan mayor nivel.
    El principal problema que veo es la falta de manteinimiento y versiones. La última versión es de 2013, aunque hay algún cambio menor de mantenimiento o para la distribución de 2015. Parece que el equipo no se mueve, pero luego se ve movimiento en la wiki de Github o algún proyecto asociado.

    Otro problema es el rendimiento de los gráficos. Aunque va bastante bien, lo que hace Bumblebee es automatizar la activación/desactivación de la tarjeta discreta e iniciar una sesión X invisible con dicha tarjeta y luego comunica toda la información de la aplicación a la sesión actual. Esto es, además de la generación de gráficos, implica un transporte que, a veces trae también compresión y descompresión, etc, por lo que al final puede haber pérdida de fotogramas por segundo y un poco más de uso de CPU cuando tenemos aplicaciones abiertas utilizando la GPU discreta.

    Al final, este proyecto nos permite tener una sesión iniciada con la tarjeta integrada, con lo que la CPU no se calienta tanto que teniendo la GPU discreta encendida y nos permite iniciarla cuando iniciamos un programa que la necesita. Tenemos que ejecutar el programa de forma especial, podemos conigurar accesos directos a los programas para que se ejecuten utilizando la tarjeta discreta pero es incómodo. Además, al estar utilizando principalmente la gráfica integrada no tendremos problemas a la hora de rotar el monitor.

    Con Bumblebee, también podríamos solucionar el problema de los programas que hacen uso de CUDA y no detectan bien la tarjeta, diciéndoles que se ejecuten con la tarjeta discreta.

    La semana que viene…

    La semana que viene publicaré la guía de cómo configuré Bumblebee en mi portátil, con muchos consejos de configuración, métodos para transportar la imagen y detalles de lo que me he ido encontrando.

    The post Gráficos híbridos en GNU/Linux. Nvidia + Intel, poco a poco vamos avanzando. appeared first on Poesía Binaria.

    by Gaspar Fernández at August 21, 2017 10:05 AM

    August 20, 2017

    Poesía Binaria

    El domingo 3 de Septiembre tienes una cita. #MaratónLinuxero

    Desde hace poco tiempo me he picado con los podcasts sobre software libre. Son un buen método para estar informado y conocer qué se cuece en la comunidad. Y, desde hace algo más de mes y medio, algo se mueve en las comunidades y los podcasts. Algo llamado Maratón Linuxero.

    El objetivo es hacer un evento de emisión en directo de ¡9 horas de duración! desde las 15:00 hasta las 24:00 (hora española, UTC+2), aunque puede que dure algo más. Vamos, para llegar con las pestañas pegadas al trabajo al día siguiente. Y todo utilizando software libre en la medida de lo posible.

    El evento no está limitado sólo a que los oyentes escuchemos lo que los podcasters nos tengan que decir, es mucho más. Los oyentes podremos interactuar por Telegram, Twitter o Youtube, podremos conocer a bloguers, podcasters, youtubers dentro del mundo y la cultura y el software libre.

    Pioneros en España

    Este evento ya forma parte de la historia del software libre en España. Ya que es la primera vez que se hace una emisión en directo de tal duración utilizando exclusivamente software libre. Al menos, hasta el último punto, justo antes de la retransmisión. La retransmisión se hará por Youtube que, aunque no sea libre, cuenta con un buen servicio de directo y les dará una gran difusión. Al fin y al cabo, es lo que interesa.

    Y ya que son 9h (mínimo) de audio, que es un montón, y puede que todos no podamos escuchar en directo todo el evento. Todos los audios quedarán grabados en Youtube y se subirán a varias plataformas de audio para poder volverlo a escuchar y descargarlo.

    Podemos ver de qué va el tema escuchando los audios disponibles tanto en Youtube como en Archive.org. En estos audios, que son mayormente pruebas de audio, emisión, software y configuraciones se van presentando muchos de los podcasters y colaboradores así como dando ciertos adelantos sobre el evento.

    Empresas colaboradoras

    Aunque todo empieza con las ganas e ilusión de un grupo de podcasters, que ya tienen tablas en estos círculos. Varias empresas se han hecho eco del evento y han querido respaldar el proyecto. En concreto, Slimbook, PCUbuntu y Vant, por supuesto, algunos de sus productos se sortearán durante la emisión del 3 de septiembre. Aunque adelantan que habrá un sorteo en la última prueba. El 27 de agosto a las 15:00 (hora Española).

    ¿Qué podcasters participal?

    15:00 – 16:00: Podcast Linux

    Juan Febles, que está detrás de Podcast Linux, un podcast que lleva algo más de un año con nosotros y ya es como de la familia.

    16:00-170:00: Eduardo Collado

    Lleva el podcast eduardocollado.com donde habla sobre todo, de servidores y WordPress.

    17:00-18:00: Yoyo Fernández

    Con tilde, el Fernández. Que podía ser primo mío, pero no nos tocamos nada. Es uno de los veteranos del podcasting de habla hispana sobre GNU/Linux con Salmorejo Geek. Donde tenemos muchas días de audio sobre nuestro sistema operativo favorito y mucho más.

    18:00-19:00: José GDF y DJ Mao Mix

    Producción musical utilizando software libre.

    19:00-20:00: KDE España Podcast

    Porque KDE es mucho más que un entorno de escritorio. Un gran podcast para conocer el ecosistema KDE y mucho más.

    20:00-21:00: Ubuntu y otras hierbas

    Un podcast de reciente creación centrado en el mundo del software libre en general y de Ubuntu en particular.

    21:00-22:00: Ugeek y Mosquetero web

    Ugeek podcast, que nos brinda pequeños ficheros de audio que podemos devorar casi sin pensar sobre software libre, servicios web, Raspberry PI y muchísimo más.
    Mosqueteroweb también tiene un gran podcast sobre tecnoogía y software libre.

    22:00-23:00: Neoranger y Enderhe

    Esperamos haber cenado en la hora anterior para escuchar a Neoranger de Neositelinux, autor de varios vídeos en Youtube sobre software libre y con un podcast recién estrenado hace poco tiempo.

    Enderhe no lleva mucho tiempo en la comunidad podcast, pero seguro que nos dará su visión y punto de vista sobre el asunto

    23:00-00:00: Paco Estrada

    Terminamos con la voz del podcasting libre. Autor de compilando podcast, otro de los obligados.

    ¿Estás preparado?

    Reserva ya ese día en tu agenda y déjate el día libre para participar en un evento histórico de la comunidad de software libre de habla hispana.

    Más información

    Tienes todos estos medios para interactura:

    The post El domingo 3 de Septiembre tienes una cita. #MaratónLinuxero appeared first on Poesía Binaria.

    by Gaspar Fernández at August 20, 2017 11:34 AM

    Entre Dev Y Ops

    Podcast 28: la tecnología detrás de Entredevyops

    EDyO Podcast

    Hemos hecho un paréntesis en nuestras vacaciones de verano para ponernos detrás de los micrófonos una vez más y traeros nuestro episodio número 28.

    En esta ocasión os explicamos todas las herramientas (algunas desarrolladas por nosotros) y servicios de terceros que utilizamos.

    Si os gusta nuestro trabajo por favor corred la voz, dadnos feedback, y valorad con 5 estrellas iTunes y me gusta en Ivoox.

    A continuación podéis encontrar los enlaces comentados en este episodio.

    Leer más… (1 min remaining to read)

    by David Acacio at August 20, 2017 07:00 AM

    August 18, 2017

    Poesía Binaria

    Trasteando con juguetes nuevos. Primeros pasos con el ESP8266

    ESP8266
    Esta pequeña placa de apenas 24x14mm contiene un microcontrolador y chip WiFi a/b/g (esas de 2.4GHz) y una memoria. Además de algunos leds, una antena y un oscilador. Cuesta muy poco dinero (apenas unos 3€ comprándolo en algunas tiendas de España y mucho menos si se compra directamente a China). Y encima consume muy poco, alrededor de 0.5W a pleno rendimiento y muchísimo menos en alguno de sus modos de sueño y bajo consumo. Lo que hace que este circuito sea idóneo para trabajar con pilas o baterías, miniaturizar nuestros proyectos y automatismos así como conectarlos a Internet o a una red local.

    Así de primeras, se me ocurren algunos proyectos, unos de ellos perversos y otros más normales. Entre ellos sistemas de automatización doméstica, lo típico encender y apagar enchufes desde el móvil, o programar para que se enciendan y apaguen y verificar el estado de los aparatos; estaciones meteorológicas a las que podemos acoplar decenas de sensores diferentes, avisadores de correo en el buzón, pequeños detectores de humo para zonas de no fumadores o para detectar que alguien se acerca a la puerta de la habitación; así como un pequeño keylogger que podemos camuflar dentro de un teclado, dispositivo USB que podrá hacer estragos y camuflar dentro de un ratón o para suplantar una WiFi y que los usuarios se conecten a ti (aunque no creo que soporte mucho ancho de banda con sacar la información que queremos y desconectar vamos sobrados).

    Es cierto que hay versiones y chips más autónomos como es el caso del NodeMCU, que puedes programarlo en LUA o Python; o por ejemplo versiones más nuevas como el ESP8866-12 (para mis experimentos estoy utilizando el ESP8266-01), cuando yo lo compré me salía un poco más barato el ESP8266-01, además, lo quiero para un proyecto en el que cuanto más pequeño, mejor.

    Estrenando el juguete

    Pero por ahora estoy como un chaval con un juguete nuevo y quiero experimentar con él. Empezar a cacharrear y a descubrir sus posibilidades. Así que vamos a empezar conectándolo al ordenador a ver qué pasa. En principio, yo he utilizado un adaptador USB a puerto serie para poder enviar y recibir de la placa. Este adaptador (otros no lo hacen) tiene dos salidas VCC. Una a 5V proporcionada por el USB y otra a 3.3V después de pasar por un regulador de tensión. Y, como el ESP8266 trabaja a 3.3V, pongo una resistencia de 1KΩ entra la patilla de transmisión del adaptador y la patilla de recepción del ESP8266. En algunos adaptadores no hace falta, pero yo, sin esa resistencia no puedo comunicarme bien con el chip. No se me ha quemado, como dicen en muchos sitios, pero pasa de mi olímpicamente.
    Adaptador USB a UART RS323

    Aprovechar el adaptador USB de Arduino

    Es otra opción si, como yo, eres de los que te pones a hacer este tipo de cosas a las 3 de la mañana y no tienes un adaptador a mano. Si tienes un Arduino cerca puedes probar hacer lo siguiente:

    Así estarás utilizando la propia placa Arduino como conversor USB-TTL para nuestro ESP8266 ya que hemos puesto RESET a VCC, el chip Atmega no va a entrar en funcionamiento y todo lo que hablemos por el puerto serie lo estaremos aprovechando para nuestro ESP8266. Eso sí, dependiendo de la placa, la resistencia de 1KΩ ya no es necesaria. Además, yo en enlazado el RX de Arduino con el RX de la ESP8266 y el TX de uno con el TX del otro, mientras que con al conversor USB hacía lo contrario. Eso es por cómo está la placa etiquetada, si hacemos caso a las flechitas que hay dibujadas todo se entiende mejor.

    Hablando con nuestro nuevo amigo

    Lo tenemos todo listo para empezar a hacer algo con el chip. Así que vamos a hablar con él a través del puerto serie. Como está pensado para comunicarnos con otro microcontrolador (éste que se encargue de la comunicación y otro que haga el trabajo sucio), podemos enviarle comandos al chip y éste nos devolverá un resultado de la ejecución de dichos comandos. Así que lo podemos conectar sin problema a un Arduino (o un circuito basado en ATmega/ATtiny), un Raspberry PI, microcontroladores PIC o incluso una placa controladora de un móvil viejo si tenemos ganas de cacharrear. Aunque, por supuesto, el ESP8266 puede funcionar de manera autónoma.

    El idioma que habla es el de los módems de toda la vida, tanto los de cable telefónico como los GSM. Bueno, no lo hablan todos los dispositivos, pero sí muchos de ellos, el lenguaje de comandos Hayes. Para mi gusto es un lenguaje muy imperativo (AT, viene de ATención) y serán comandos muy simples, y siempre con una respuesta cubriendo así todas las opciones que tiene nuestro chip. Así que vamos a conectar a un puerto USB nuestro ESP8266 y abrir un emulador de terminal. Podemos utilizar el mismo que viene con Arduino, aunque a mí me gusta más CuteCom. Aunque puedes utilizar GNU Screen si lo prefieres.
    La conexión por defecto suele ser a 115200 baudios sin paridad y con CRLF como fin de línea (aunque a mí me funciona sólo con LF).

    Hay algunos comandos que soportan las terminaciones _CUR y _DEF. Estas definiciones suelen afectar a la memoria interna del chip, ya que guardan valores de configuración. Estos pueden ser tratados sólo para la sesión actual (_CUR), por lo tanto cuando reiniciemos se perderá esa información; o pueden ser grabados de forma definitiva en el chip y recordados en futuras sesiones (_DEF). Esto nos permitirá por ejemplo conectar automáticamente con un punto de acceso o recordar la velocidad de conexión del puerto serie entre otras cosas.

    Voy a hacer un resumen aquí de algunos comandos que podemos utilizar:

    Comprobar el estado del chip

    Sólo para saber que la comunicación se establece y que el chip está bien inicializado.

    AT
    OK

    Si obtenemos un error aquí, puede deberse a:
    • La inicialización no ha sido correcta. Se ha encontrado un problema al ejecutar el programa y todas las demás acciones se cancelan.
    • La corriente de entrada no es estable. Tal vez haya habido alguna variación en la entrada y ha provocado un mal funcionamiento.
    • El voltaje no es estable o tiene valores muy grandes o muy pequeños. Igual que antes, eso puede provocar un mal funcionamiento. Si le metemos 9V al chip sí que nos lo podemos cargar, pero si le introducimos 5V no se garantiza que el funcionamiento sea correcto. Lo mismo si le aplicamos menos de 3V.
    • Error en el programa. Normalmente el firmware original está muy probado pero puede tener errores. Asimismo si probamos con otro firmware pueden pasar muchas cosas. ¡Pero estamos aquí para jugar y experimentar!
    • La velocidad de nuestro terminal no es correcta. Es decir, que o nuestro ESP8266 o nuestro ordenador estén hablando a diferentes velocidades, lo que puede trabar la comunicación.
    • ¡Cualquier cosa! En el mundo del HW y el SW todo puede fallar. Y te agradecería que pusieras un comentario para completar esta respuesta.
    • Tu ESP8266 está muerto, Jim. Porque todo puede pasar.
    • Tu conversor USB está muerto o, al menos, moribundo. Porque no siempre va a tener la culpa el mismo.
    • Revisa tus cables. Me ha pasado muchas veces, cuando tienes muchos cables juntos, algunos valen, otros no valen, estás con la protoboard y no hacen buen contacto o realmente tus ojos te han traicionado. Si estás con una placa soldada revisa también tus soldaduras, puede que haya un problema. Si es problema de contactos tal vez sí hagan contacto pero no sea muy firme y fluctúe la corriente.

    Reset del dispositivo

    Cuando queremos reinicializar el chip cancelando conexiones y empezar de nuevo (también podríamos quitarle corriente y volver a aplicársela).

    AT+RST
    OK
    ets Jan  8 2013,rst cause:2, boot mode:(3,6)
    load 0x40100000, len 1856, room 16
    tail 0
    chksum 0x63
    load 0x3ffe8000, len 776, room 8
    tail 0
    chksum 0x02
    load 0x3ffe8310, len 552, room 8
    tail 0
    chksum 0x79
    csum 0x79
    2nd boot version : 1.5
    SPI Speed      : 40MHz
    SPI Mode       : DIO
    SPI Flash Size & Map: 8Mbit(512KB+512KB)
    jump to run user1 @ 1000
    ….
    ….
    ….
    Ai-Thinker Technology Co. Ltd.
    ready

    Restaurar valores de fábrica

    Si queremos restaurar la configuración del chip como venía cuando lo compramos podemos ejecutar:

    AT+RESTORE

    El chip se reiniciará cuando termine de reponer todos los valores.

    Versión del firmware

    Nos dará información básica de la versión, y su fecha. Nos ayudará para saber si podemos ejecutar ciertos comandos o saber si tenemos ciertas características. Podremos actualizar nuestro chip en el futuro si queremos.

    AT+GMR
    AT version:1.1.0.0(May 11 2016 18:09:56)
    SDK version:1.5.4(baaeaebb)
    Ai-Thinker Technology Co. Ltd.
    Jun 13 2016 11:29:20
    OK

    Echo de comandos

    Si queremos que al enviar un comando nos diga qué comando hemos enviado o no. Por ejemplo, si lo utilizamos con un Arduino, puede ser incómodo enviar un comando y recibir la respuesta de nuevo. Nos puede dificultar un poco el parseo de la misma.

    ATE1
    OK <---- Activa echo
    ATE0
    OK <---- DESactiva echo
    [/simterm]
    Velocidad de conexión
    Lo ideal es dejarlo como está 115200 baudios no es mala velocidad. Sobre todo si este chip se va a encargar de gestionar la red y otro sólo se limitará a controlar, o queremos el puerto serie para depuración o enviar algún comando. Aunque puede ser que el chip con el que vamos a conectar nuestro ESP8266 no sea capaz de ir tan rápido. Por ejemplo muchos Arduinos Duemilanove no van a más de 57600 y eso puede ser un problema. Así que no nos queda otra que cambiar la velocidad de nuestro chip.
    Las velocidades válidas que he podido ver son: 9600, 19200, 38400, 74880, 115200, 230400, 460800 y 921600 aunque puede que con otro firmware más nuevo haya más velocidades soportadas.
    [simterm]
    AT+IPR=9600

    La salida, debería ser un OK, aunque dado que hay un cambio de velocidad no vamos a ser capaces de captar ese OK. A partir de este momento podremos conectar a 9600 baudios.
    Si lo vamos a conectar con un Arduino la velocidad de 9600 puede ser más que suficiente si sólo vamos a enviar/recibir datos de control. Por ejemplo, estados de dispositivo, temperaturas, etc y luego que el ESP8266 se encargue de generar una respuesta web por ejemplo y la envíe por la red.

    Antiguamente había un comando AT+CIOBAUD con el que podíamos consultar la velocidad actual. Aunque no tiene mucho sentido ya que hemos tenido que establecer dicha velocidad para hacer la conexión. Así que con AT+IPR sólo podemos definir una velocidad nueva.
    Atención. AT+IPR define la velocidad que le digamos. Eso es, que si no es una velocidad estándar, lo va a aceptar y el chip empezará a funcionar o malfuncionar a esa velocidad y puede que no podamos acceder a él hasta que flasheemos de nuevo el firmware. No es un brickeo completo, pero un pequeño error nos puede amargar un buen rato de trabajo.

    Dato que este comando es peligroso, en versiones más nuevas del firmware se incluye AT+UART_CUR y AT+UART_DEF en donde podemos modificar los bits de parada, comprobación de paridad y algunas cosas más.

    Cambiar modo WiFi

    El WiFi del ESP8266 puede funcionar de varias maneras:

    1. STA – Modo estación. Es decir, el chip se conecta a un punto de acceso.
    2. AP – Punto de acceso. Para que los dispositivos se conecten a nosotros.
    3. STA+AP – Lo mejor de los dos mundos.

    Ahora bien, podemos consultar cómo está funcionando el dispositivo y también definir el modo de funcionamiento. Este modo se mantendrá después del reset. Incluso tras la perdida de energía.

    AT+CWMODE_CUR?
    +CWMODE_CUR:1
    AT+CWMODE_CUR=3
    OK
    AT+CWMODE_CUR?
    +CWMODE_CUR:3

    Listar redes WiFi disponibles

    Sólo podremos listar las redes visibles si estamos en modo STA o STA+AP. Si sólo estamos como AP nos devolverá ERROR.

    AT+CWLAP
    +CWLAP:(4,”dlink-EFFB”,-88,”1c:2f:2b:64:ea:2b”,2,18,0)
    +CWLAP:(3,”vodafone218A”,-90,”58:2a:f7:a9:31:90″,4,20,0)
    +CWLAP:(0,”WLAN_TA1″,-91,”d4:a0:2a:cd:8e:f8″,5,13,0)
    +CWLAP:(4,”Jazztel_A5B717″,-80,”9c:97:26:a5:c7:17″,6,16,0)
    OK

    Veremos una lista de las redes (así conocéis a mis vecinos un poco. Además vemos más información como:
    • Seguridad de la red:
      • 0 – Open. Red abierta.
      • 1 – WEP
      • 2 – WPA_PSK
      • 3 – WPA2_PSK
      • 4 – WPA_WPA2_PSK
    • SSID. O nombre de la red.
    • RSSI. Fuerza de la señal.
    • MAC. Dirección MAC del punto de acceso.
    • CH. Canal.
    • freq. offset. Offset del punto de acceso en KHz
    • freq. calibration. Calibración para el offset anterior.

    Si queremos personalizar esta salida podremos utilizar algo como:

    AT+CWLAPOPT=1,127
    OK

    En este caso ordenará las redes de la salida por su intensidad de señal (el primer valor, 0 si no queremos ordenarlas). Y mostrará todos los datos (el segundo valor es una máscara de bits que activa o desactiva cada uno de los valores de la salida).
    Por ejemplo AT+CWLAPOPT=1,7 ordenará las redes por SSID y mostrará los valores de seguridad, ssid e intensidad de señal solamente.

    Conectarse a una red WiFi

    ¡Vamos a hacer algo de provecho! Conectémonos a una red. Primero, elegiremos si vamos a tener activo DHCP o no, para que nuestro dispositivo coja una dirección IP automáticamente (Si el router no lo soporta, olvidémonos):

    AT+CWDHCP_CUR=1,0
    OK

    Con esto decimos que en el modo 1 (Station) ponemos DHCP a 0. Si quisiéramos hacerlo con el modo AP sería el modo 0. Y si queremos activar o desactivar ambos modos a la vez, pondremos modo2.
    AT+CWJAP=”MiRed”,”MiPassword”
    WIFI CONNECTED
    AT+CWJAP?
    +CWJAP:”MiRed”,”xx:xx:xx:xx:xx:xx”,9,-73

    Si utilizamos DHCP, ya tenemos que tener dirección IP. Pero si queremos configurar una IP estática haremos:

    AT+CIPSTA_CUR=”192.168.0.19″,”192.168.0.1″,”255.255.255.0″

    Donde la primera dirección es la dirección IP del dispositivo, el segundo es la puerta de enlace y el tercero la máscara de subred. Los dos últimos valores no es obligatorio especificarlos para el ESP8266, pero tal vez sí lo sea para tu red. Y luego cuando consultemos nuestra dirección IP:
    AT+CIPSTA_CUR?
    +CIPSTA_CUR:ip:”192.168.0.19″
    +CIPSTA_CUR:gateway:”192.168.0.1″
    +CIPSTA_CUR:netmask:”255.255.255.0″
    OK

    Las DNS a utilizar se obtienen o bien del router (por DHCP) o se establece OpenDNS (208.67.222.222). En versiones antiguas como la mía no se permite cambiar esta información, aunque en versiones nuevas se puede hacer AT+CIPDNS=1,dns_server

    Y cuando queramos desconectar…

    AT+CWQAP
    OK

    Otra forma de mirar la IP es utilizar:

    AT+CIFSR
    +CIFSR:APIP,”192.168.4.1″
    +CIFSR:APMAC,”62:01:94:0b:0a:1a”
    +CIFSR:STAIP,”192.168.0.19″
    +CIFSR:STAMAC,”60:01:94:0b:0a:1a”

    Resolver un dominio

    Un dominio debe ser resuelto a una dirección IP antes de conectarnos hacia él. Aunque podemos conectarnos a través del nombre de dominio, para probar que todo está bien podemos pedir la información de la resolución del nombre. Internamente se contactará con el servidor de nombres para obtener el valor:

    AT+CIPDOMAIN=”google.com”
    +CIPDOMAIN:216.58.214.174
    OK

    Ping a un servidor

    Con esto sabemos cuánto tarda en responder un host. Lo podemos hacer tanto por IP como por dominio:

    AT+PING=”google.com”
    +14
    OK

    Google ha tardado en contestar 14ms.

    Conectar con un servidor web

    Vamos a poner vamos comandos con el fin de descargar contenido de un servidor web.

    • Primero con CIPMUX diremos que vamos a soportar múltiples conexiones, Porque nosotros lo valemos.
    • Luego iniciamos una conexión (le damos 2 como identificador, por ejemplo)
    • Tras ello iniciamos un envío de datos por la conexión 2 de 61 bytes
    • Una vez aceptada, enviamos la información.
    • Ahora recibimos la información del servidor.

    La conexión la vamos a hacer al servicio ifconfig.me, para saber cuál es nuestra IP remota en Internet. Veamos los comandos

    AT+CIPSTART=2,”TCP”,”ifconfig.me”,80
    2,CONNECT
    OK
    AT+CIPSEND=2,61
    OK
    GET / HTTP/1.1
    Host: ifconfig.me
    User-Agent: curl/1.2.3
    Recv 61 bytes
    SEND OK
    +IPD,2,193,153.121.72.211,80:HTTP/1.1 200 OK
    Date: Tue, 25 Jul 2017 19:26:52 GMT
    Server: Apache
    Vary: Accept-Encoding
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/plain
    32.111.222.123
    2,CLOSED

    Como la conexión se cierra sola no hacemos nada más, pero si queremos cerrarla manualmente podemos hacer:
    AT+CIPCLOSE=2
    OK

    Si queremos hacerlo rápido, ya que muchos servidores HTTP requieren velocidad a la hora de pedirles información porque tienen timeouts muy ajustados, podemos hacer un script como este:
    1
    2
    3
    4
    5
    echo -e "AT+CIPSTART=2,"TCP","ifconfig.me",80\r" >/dev/ttyACM0;
    sleep 3;
    echo -e "AT+CIPSEND=2,61\r" > /dev/ttyACM0 ;
    sleep 1;
    echo -e "GET / HTTP/1.1\r\nHost: ifconfig.me\r\nUser-Agent: curl/1.2.3\r\n\r\n" > /dev/ttyACM0 ;

    Como vemos, en la línea de CIPSTART especificamos el ID de conexión, el tipo de conexión que puede ser TCP, UDP o SSL (bien por la seguridad, aunque la pondremos algo a prueba), el host o IP con el que contactar y el puerto. Y luego para CIPSEND especificaremos el ID de conexión y el tamaño de los datos a enviar, cuando recibamos el OK con el prompt (petición de información) procedemos a enviar los datos en bruto. Se leerán tantos bytes como hayamos puesto en el tamaño.

    Actualización del Firmware por WiFi

    Este chip soporta auto-actualización del propio software del chip si lo conectamos a una red inalámbrica de la siguiente manera:

    AT+CIUPDATE
    +CIPUPDATE:1
    +CIPUPDATE:2
    +CIPUPDATE:3
    +CIPUPDATE:4

    Tarda un rato en actualizar y tal vez tengamos un problema en nuestros dispositivos por temas de memoria. Sobre todo porque el chip viene con poco espacio de almacenamiento y los nuevos firmwares son mucho más grandes.:
    1. Encontrar el servidor
    2. Conectar
    3. Descargar el software
    4. Actualizar!!

    ¿Hay más?

    Por supuesto tenemos más comandos soportados en viejas y nuevas versiones del firmware. He sacado sobre todo comandos de conexión a un punto de acceso y conexión como cliente aunque también podemos ser un punto de acceso y crear un servidor. Además de los modos de sueño y bajo consumo de los que quiero investigar un poco más. Aunque lo dejo para futuros posts. De todas formas, podemos ver la referencia de comandos AT del ESP8266.

    El primero de muchos

    Este cacharro me ha encantado, así que le dedicaré algunos posts más a los nuevos descubrimientos que haga con él. Lo próximo será programarlo y tengo muchas ideas para poner en práctica.

    The post Trasteando con juguetes nuevos. Primeros pasos con el ESP8266 appeared first on Poesía Binaria.

    by Gaspar Fernández at August 18, 2017 08:05 AM