DevelUY

Planeta de desarrolladores uruguayos

21 de febrero de 2018

Fernando Briano

DOOM en Nintendo Switch

Una nueva actualización para DOOM en Nintendo Switch agrega una opción de control que nos permite utilizar el giroscopio incorporado de los Joy-Con para una orientación más precisa. Esta funcionalida es más que bienvenida, ya que mejora muchísimo el juego. Este estilo de control para juegos de disparos en primera persona fue presentado inicialmente en el Wii U con el juego Splatoon. Una mezcla entre las palancas del control y los sensores de movimiento nos permiten mayor precisión al momento de apuntar y disparar. Lleva un poco de práctica agarrarle la mano, pero vale la pena.

De las pocas horas que llevaba jugando DOOM en mi Switch, la precisión a la hora de apuntar con el control era de mis mayores problemas. Parte falta de experiencia con juegos FPS, parte que los Joy-Con no son de los mejores controles para este tipo de precisión. Pensé que si eventualmente me compraba un Pro Controller la cosa iba a mejorar, pero habiendo probado la nueva actualización, la cosa cambió y mucho. El control con movimiento es opcional, y podemos seguir jugando de la manera tradicional como siempre.

DOOM Nintendo Switch

El juego funciona muy bien en Nintendo Switch. Si bien no he jugado tantas horas (digamos que Zelda ha consumido un 90% del tiempo que uso el Switch), no he tenido problemas de rendimiento o pérdida de frames. Es un port bastante sorprendente para la capacidad de hardware del Switch. El título fue desarrollado originalmente para PlayStation 4, PC y XBox One. La actualización agrega incluso más mejoras, todo detallado en el blog de Bethesda:

Características nuevas

  • Apuntar con movimientos – nueva opción del esquema de controles permite mover el Nintendo Switch para apuntar con más precisión
  • Partidas multijugador – Se agregó un nuevo sistema de partidas, facilitando agrupar y jugar con amigos en modo multijugador (ésto todavía no lo he probado)
  • Ícono del juego actualizado – El ícono del juego ahora coincide con el arte de caja de DOOM para Nintendo Switch

Mejoras

  • Aumento de la resolución promedio en areas de menor resolución del juego
  • Implementadas optimizaciones de CPU
  • Agregado soporte para idioma Chino Tradicional

Arreglos

  • Arreglado problema que resultaba que el juego se trancara al usar la BFG
  • Arreglado problema que causaba problemas de audio mientras se jugaba
  • Arreglado problema que causaba que aparecieran texturas estiradas en multijugador
  • Arreglado problema donde los controles no respondían en el menú del juego
  • Arreglado problema donde jugadores podían haber recibido mensaje de estar prohibidos en multijugador

El ícono es uno de los temas que da mucho que hablar a los fans del Nintendo Switch, y como dice más arriba, cambió para coincidir con el arte de la caja:

Doom - Nintendo Switch

Nada más catártico que asesinar sádicamente demonios después de un largo día de trabajo…

por Fernando, el 21 de febrero de 2018 a las 09:00

20 de febrero de 2018

Fernando Briano

Configurar aceleración del touchpad en teclado inalámbrico Logitech K400 con Ubuntu 16.04 automáticamente al conectarlo

Mi laptop del trabajo es una Dell XPS 13 con Ubuntu 16.04. Sé que el sistema está un poco desactualizado pero es el último LTS de Ubuntu hasta ahora, y estoy vago para tomarme el tiempo de instalarle Debian. Por el momento me conformo con Ubuntu, más allá de algún que otro detalle.

Recientemente empecé a usar un teclado inalámbrico que tenía desde hace un tiempo: Logitech K400. Éste incluye también un Touchpad, por lo que es bastante portátil contando con ambas funcionalidades en un dispositivo relativamente chico. En el trabajo lo uso con la laptop conectada a un monitor grande. El problema con el que me encontré fue que la aceleración del touchpad era bastante lenta. Ésto se nota más que nada conectado a dicho monitor. Por algún bug de Ubuntu o detección de hardware, no aparece la configuración para cambiar la velocidad de movimiento del touchpad en las preferencias de Mouse & Touchpad del sistema. Entre varias cosas que leí, encontré que aparentemente éste touchpad se detecta como un mouse, por eso la configuración de aceleración del touchpad de la configuración visual afecta al touchpad de la laptop, pero no el Logitech.

Teclado Logitech k400

Como siempre, me embarqué en una aventura de aprendizaje para mejorar la experiencia de usuario con Linux. Probablemente esto sea más fácil con un Ubuntu más nuevo u otra distro, pero ahí vamos… Lo primero que usamos es xinput para cambiar las propiedades del dispositivo que conectamos.

Al ejecutarlo, vemos los dispositivos y podemos identificar cuál es el que quiero cambiar. En este caso Logitech K400, con un id=15. Para estar seguros podemos desconectarlo y volver a ejecutar xinput y comprobar que es el id en cuestión:

fernando ~ $ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ DLL075B:01 06CB:76AF Touchpad id=11 [slave pointer (2)]
⎜ ↳ Logitech K400 id=15 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Integrated_Webcam_HD id=10 [slave keyboard (3)]
↳ Intel Virtual Button driver id=12 [slave keyboard (3)]
↳ Intel HID events id=13 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ Dell WMI hotkeys id=16 [slave keyboard (3)]
↳ Logitech K400 id=17 [slave keyboard (3)]
 
Ahora, con –list-props, vemos las propiedades:
 
$ xinput –list-props
Usage: xinput list-props [ …]$ xinput list-props 15
Device ‘Logitech K400’:
Device Enabled (140): 1
Coordinate Transformation Matrix (142): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Accel Speed (282): -0.961165
libinput Accel Speed Default (283): 0.000000
libinput Accel Profiles Available (416): 1, 1
libinput Accel Profile Enabled (417): 1, 0
libinput Accel Profile Enabled Default (418): 1, 0
libinput Natural Scrolling Enabled (284): 0
libinput Natural Scrolling Enabled Default (285): 0
libinput Send Events Modes Available (260): 1, 0
libinput Send Events Mode Enabled (261): 0, 0
libinput Send Events Mode Enabled Default (262): 0, 0
libinput Left Handed Enabled (286): 0
libinput Left Handed Enabled Default (287): 0
libinput Scroll Methods Available (288): 0, 0, 1
libinput Scroll Method Enabled (289): 0, 0, 0
libinput Scroll Method Enabled Default (290): 0, 0, 0
libinput Button Scrolling Button (419): 2
libinput Button Scrolling Button Default (420): 274
libinput Middle Emulation Enabled (294): 0
libinput Middle Emulation Enabled Default (295): 0
Device Node (263): “/dev/input/event6”
Device Product ID (264): 1133, 16420
libinput Drag Lock Buttons (298):
libinput Horizonal Scroll Enabled (265): 1

La que queremos cambiar es “Accel Speed”, propiedad 282 con un valor negativo. Para cambiarla, usamos –set-prop (por más información man xinput).
<div class=’codigo’>$ xinput –set-prop 15 282 0.9</div>

Ingresamos el id del dispositivo, la propiedad y el valor que le queremos asignar. Empecé con 0.5, y fui subiendo hasta que al final lo dejé en 1.0 que me quedaba bastante cómodo. Hasta acá venimos bien, con la satisfaccion de haber encontrado fácilmente cómo cambiar la aceleración hasta encontrar una que nos sirve. Fui tan perezoso que por un tiempo metí esa línea de xinput en uno de mis scripts, y lo ejecutaba cada vez que conectaba el teclado. Esa misma pereza y un pequeño detalle adicional, me llevaron a querer automatizar más este proceso. Ya de paso aprendí alguna cosa en el camino.

En primer lugar es importante notar que el id del dispositivo (15 en el código de arriba) no siempre es el mismo. Varía según los puertos USB y si están ocupados. Y al variar el ID, también varía el valor numérico de la propiedad Accel Speed. Así que también hay que meter eso en scripts.

Lo primero es obtener el ID, y como me encanta usar expresiones regulares y las herramientas de procesamiento de texto de Unix, por ahí fui:

ID=`xinput | awk '/Logitech K400/{print $5; exit}' | sed 's/id=//'`

Con esto, procesamos la salida de xinput, la pasamos por un awk que imprime la primera línea donde aparece “Logitech K400” (porque aparece una segunda vez como teclado), y nos quedamos con el valor numérico del id en la variable ID. Seguimos con:

PROP=`xinput --list-props $ID | grep -o -P "Accel Speed \(\K[0-9]*"`

Acá listamos las propiedades del dispositivo cuyo ID guardamos en la línea anterior, y con grep sacamos el valor numérico de la propiedad Accel Speed. Por último, ejecutamos el seteo de la propiedad con las variables dinámicas y la seteamos en 1.0 que fue el valor que encontré cómodo:

xinput --set-prop $ID $PROP 1.0

Todo esto lo metemos en un script, le damos permisos de ejecución y lo dejamos guardado. En principio continuaba ejecutándolo manualmente cada vez que conectaba el teclado.

Pero hay un nivel más de perfeccionamiento, que el script se ejecute automáticamente al conectar el teclado. Para eso me puse a investigar hasta que encontré que es relativamente sencillo creando nuevas reglas udev. En el directorio /etc/udev/rules.dencontramos archivos del manejo dinámico de dispositivos. Les sugiero dar una leída a man udev para ver más. Pero básicamente podemos crear un archivo en ese directorio -entre otros- que agregue manejo dinámico cuando conectamos un dispositivo USB.

Los archivos creados ahí deben tener un nombre precedido por dos números y un guión y la extensión rules. En mi caso creé /etc/udev/rules.d/85-logitech-keyboard.rules, que se ve así:

ACTION==”add”, SUBSYSTEM==”usb”, ATTRS{idVendor}==”046d”, ATTRS{idProduct}==”c52b”, RUN+=”/usr/local/bin/logitech-keyboard”

De nuevo, acá es recomendable leer el manual de udev, pero cada parte tiene su explicación:

  • ACTION – el nombre de una acción de evento. En este caso “add”, cuando se agrega el teclado
  • SUBSYSTEM – subsistema del dispositivo del evento, en este caso usb
  • ATTRS = atributos del evento, donde reviso que el idVendor y el idProduct coincidan con los del teclado. Para obtener estos valores, ejecuté lsusb y copié los valores del teclado:
    Bus 001 Device 043: ID 046d:c52b Logitech, Inc. Unifying Receiver

    Como ven, los ID separados por : son el id del fabricante y del producto respectivamente.

  • RUN – Le digo que agregue un ejecutable al evento, en este caso el script que había escrito más arriba.

Para ir probando que el script está siendo ejecutado, podemos usar algo como agregar texto a un archivo e ir mirándolo con tail -f archivo.txt cuando conectamos y desconectamos el usb. También es útil mirar el log del sistema con tail -f /var/log/syslog que nos puede avisar si hay algún error.

Conclusión, dejé andando este script que aumenta la aceleración del touchpad de este teclado automáticamente al conectarlo. Seguramente no sea necesario si actualizo a una versión más actual de Ubuntu o paso a Debian eventualmente. Pero el conocimiento adquirido puede ser útil en un futuro, tanto por problemas con el hardware, como para agregar comportamientos automáticos durante la conexión de dispositivos. Lo dejo como referencia y ojalá a alguien más le sirva.

por Fernando, el 20 de febrero de 2018 a las 20:41

14 de febrero de 2018

Fernando Briano

Videos RubyConf Argentina: 2011 – 2014

Hace unos días, RubyConf Argentina volvió a aparecer por Twitter. Personalmente esperaba noticias de una nueva edición de la conferencia. Pero por ahora tenemos que conformarnos con la noticia de que los videos de todas las charlas, desde 2011 a 2014, fueron subidos a YouTube.

RubyConf Argentina Videos

Hay muchas buenas charlas, y se pasó muy bien. ¡Esperemos que eventualmente vuelvan! Mientras tanto, repasemos los videos:

 

por Fernando, el 14 de febrero de 2018 a las 20:20

12 de febrero de 2018

Fernando Briano

Humble Book Bundle – Libros sobre Programación Funcional por O’Reilly

Functional Programming - Humble Book Bundle

Nuevo paquete de Humble Book Bundle con libros sobre Programación Funcional de la mano de la editorial O’Reilly. Podemos pagar el monto que queramos por 15 libros digitales valorados en USD 515. Es una excelente oportunidad para meterse en el mundo de la programación funcional.

El monto mínimo es de USD 1 por 5 libros:
Living Clojure, Learning Scala, Becoming Functional, Introducing Elixir, Introducing Erlang

Pagando USD 8 o más obtenemos además:
Clojure Cookbook, Testing in Scala, Scala Cookbook, Real World Haskell, Functional JavaScript

Pagando USD 15 o más obtenemos todos los títulos anteriores mas éstos:
Clojure Programming, Programming Scala, Functional Thinking, Parallel and Concurrent Programming in Haskell, Programming Rust

Los ebooks están disponibles en PDF, ePUB y MOBI, por lo que pueden ser leídos en casi cualquier dispositivo. Como se acostumbra en los paquetes Humble Bundle, además de elegir el precio, podemos elegir dónde destinamos el dinero que pagamos, incluyendo una organización de beneficencia. En este caso se trata de Code for America, una fundación sin fines de lucro que trabaja con sociedad civil y el gobierno para mejorar las comunidades.

Visita Humble Book Bundle para obtener tus libros.

Functional Programming - Humble Book Bundle

por Fernando, el 12 de febrero de 2018 a las 19:42

9 de febrero de 2018

Enrique Almeida

Mejorar la calidad de nuestro software ayudando a otros

En Concepto desde hace un tiempo estamos haciendo cosas para colaborar con la incorporación de jóvenes al mercado de tecnologías de la información. Es un área que permite crecer a las empresas y a las personas, hay trabajo y todos salen beneficiados.

Fuimos con una borrador de una idea a hablar con los amigos de Abstracta y ellos elaboraron (supongo que ya lo tenían medio elaborado) un plan para armar centros de pruebas de software (o Centros de Excelencia?) en el interior del pais, para probar aplicaciones y detectar oportunidades de mejora.

La idea es crear la infraestructura  y capacitar a personas, para que las empresas del medio (y podria ser en el futuro del exterior) puedan contratar personal para realizar pruebas (de performance, funcionales, exploratorias, revision de codigo, de documentación, etc) con supervision de ellos, trabajando en forma remota desde dicho centro.

La idea es tratar de capacitar y contratar a gente joven con poca experiencia laboral , de forma de introducirla en nuestra industria. Pueden ser de Jóvenes a Programar, Nahual, UTEC, UTU u otra capacitación. La idea es que las personas no tengan que separarse de su familia para trabajar en tecnología.

Las empresas deberian contratar al personal de un pool de personas provistos por abstracta (que seria quien haria la supervision local), poner personal tecnico y funcional que sepa de la aplicacion a probar y brindar lo necesario para que la aplicacion pueda ser probada.

Como salida se tendrian las recomendaciones o oportunidades de mejoras encontradas por este grupo y la posibilidad de contratar en el futuro a estas personas para realizar tareas en la empresa en forma mas definitiva.

Puede ser una buena oportunidad de ayudar a otros y ampliar la fuerza laboral. Aun hay muchas cosas por definirse y pueden cambiar por el camino.

Si tenes una empresa o un producto y te interesa participar, podes poner un comentario en este post o un mail a <ealmeida  @ concepto.com.uy y con> o con Gonzalo Brun Tirelli <gonzalo.brun @ abstracta.com.uy>




por noreply@blogger.com (Enrique Almeida), el 9 de febrero de 2018 a las 15:58