Inicio » Sin categoría

Archivos de la categoría: Sin categoría

Comprobación placa nucleo-L476RG

Objetivo

Hay ocasiones en que la placa deja de funcionar y pensamos que se ha estropeado. Es cierto que, si se trata mal, la placa queda inutilizada; pero también puede pasar que nuestra aplicación la bloquea y da esa misma sensación.

Esta entrada pretende ilustrar el procedimiento para recuperar la placa en estos casos.

IMPORTANTE: Hay cables USB muy cutres que no sirven para trabajar con la placa.

Conectando a la placa con el STM32CubeProgr y borrándola

La aplicación STM323CubeProg permite, entre otros, acceder a la memoria flash del micro y borrarla, descargar firmwares, etc. Es ahiora la aplicación oficial de St para estas tareas y el resto ya no están recomendadas popr lo que se recomienda dejar de usar el resto de opciones (p.e. StLink).

La aplicación ofrece muchas opciones de acceso a la placa, pero aquí vamos a asumir que se hace desde el ST-Link-v2 integrado en la propia placa.

Necesitamos un cable USB y conectar la placa al ordenador. Si la placa está bien, se activará una unidad de disco USB. No viene al caso, pero es síntoma de que la placa está funcionando.

Abrimos STM32CubeProg e intentamos acceder a la placa siguiendo los pasos de la siguienter imagen.

¿Ha ido bien?

Si es así, podemos proceder a borrarla toda siguiendo los pasos indicados en la siguiente imagen.

Y placa lista para trabajar.

IMPORTANTE: Una vez que hayamos terminado de usar StCubeProg, darle a «Disconnect» para que la placa pueda usarla otra aplicación, por ejemplo, Keil.

¡No he conseguido acceder a la placa!

Vaya. Pues vamos a probar otras opciones ordenadas de más inmediata a más complicada. Recomendaría empezar por la primera y, si no va, seguir avanzando.

Intentar con el modo «under reset»

Es posible que la placa esté bloqueada porque la aplicación grabada haya modificado las líneas de depuración. Un truco para hacerse de nuevo con el control es que el depurador aplique un reset al microcontrolador y tome el control antes de que la aplicación se inicie.

Esta opción no funcionará, aunque sea activable desde StCubeProg, en sistemas de depuración que no soporten «hardware reset».

Si consigues tomar el control, procede a borrar la flash y listos.

Con «reset» a mano

Esta es una opción poco ortodoxa basada en el pricipio anterior, pero usando un método «digital».

Procede de la siguente manera:

  • Abre STM32CubeProg y elige la opción «ST-LINK»
  • Conecta la placa al ordenador
  • Pulsa el reset de la placa y mantenlo pulsado
  • En STM32CubeProg dale a «Connect» y cuenta «uno»
  • Suelta inmediatamente el pulsador

Si has conseguido tomar el control, procede a borrar la memoria y listos.

Con modo «bootloader»

Y el último recurso es intentar poner la placa en modo «bootloader». Para ello seguir estos pasos:

  • Quita la alimentación a la placa.
  • Coloca un jumper o un cablecillo entre los pines 3 y 5 de CN7.
  • Alimenta la placa.
  • Pulsa el botón de reset.
  • Quita el jumper/cablecillo con la placa alimentada.
  • Conecta STM32CubeProg a la placa usando el procedimiento normal
  • Borra la memoria.

Lo que hemos hecho es poner a «1» el pin BOOT para que la plaque arranque con una aplicación interna grabada por St que se llama «bootloader» y con la que se pueden hacer cosas muy interesantes que no vienen al caso.

Nosotros simplemente nos hemos aprovechado de que la placa ha arrancado con un programa razonable.

Grabando un programa

Para rematar, se puede probar a grabar un programa en la placa para comprobar funcionalidades.

La propuesta es que grabemos en la flash del micro el «ejecutable» resultante de construir una aplicación.

Como ejemplo, se ha construido el ejercicio del módulo delay para que genere un «ejecutable» en formato Intel-HEX que cualquier grabador de memorias flash del mundo mundial suele soportar.

Aquí está el ejemplo de archivo Intel_HEX para grabar en la placa. Descárgalo.

Asumiendo que estamos conectados a la placa con el STM32CubeProg, podemos grabar este «firmware» en la placa y pulsar despues el botón de reset para ver si funciona.

Observa la siguiente imagen para ver los pasos a seguir.

Debería parpaderar el led a un ritmo de 567.890 uS, más o menos. Abajo está el bucle principal de la aplicación usada.

Chuleta de git

Objeto

Esto es una chuleta para mi. Nada más.

Instalar

Para Linux Ubuntu

$ sudo apt update
$ sudo apt install git

Y probamos si ha ido bien la cosa

$ git --version
git version 2.17.1

Configurar parámetros globales

Algunos parámetros globales

$ git config --global user.name "Angel Perles"
$ git config --global user.email "aperles@itaca.upv.es"

Crear un repositorio

A partir de un proyecto local

Si, por ejemplo, tenemos un proyecto en el diretorio pepito, hacemos

$ cd pepito
$ git init

Y, dentro de petito, se creará el .git con los metadatos para el seguimiento del proyecto.

CUIDADÍN: Que los archivos aún to están en seguimiento.

Un proyecto en blanco o con plantilla

La idea es que se crea un directorio, por ejemplo, juanito, que contiene un repositorio git en blanco para que empecemos a trabajar

$ git init juanito

Se puede crrear un nuevo repositorio a partir de una plantilla con …

otro día

Repositorios «bare»

Otro día, pero tendré que mirarlo

Gestionar los archivos del repositorio

Es decir, añadir, borrar, mover … archivos al seguimiento.

Siempre podemos ir viendo cómo va la cosa usando

$ git status

Añadir archivos

IMPORATANTE: Más aque añadir al repositorio, lo que se está haciendo es añadir al siguiente commit. Ver https://git-scm.com/book/es/v2/Fundamentos-de-Git-Guardando-cambios-en-el-Repositorio

Para añadir un solo archivo

$ git add archivo

Para añadir archvos de un directorio

$ git add directorio

Para añadir archivos de u directorio y subdirectorios con un determinado patrón. VIGILA que se usa «\» para el escape

$ git add directorio/\*.c

Meterlo todo en el git (mejor mirar antes lo de .gitignore)

$ git add .

¿No estamos seguros de qué se va a añadir? Pues metemos –dry-run para ver cuál es la intención de la orden, por ejemplo

$ git add --dry-run directorio/\*.c

NOTA: Los archivos ignorados por la configuración (.gitignore) no son añadidos aunque se ponga explícitamente en la orden.

NOTA: Los directorios vacíos no se añaden. Se puede forzar que se añadan metiendo algún archivo vació dentro.

Ignorar archivos

Para evitar que cirtos archivos o patrones de archivos se añdan al repositorio se puede crear el archivo .gitignore en la raiz del repositorio (bueno, en realidad, puede ser más complicado que esto).

Cada línea del archivo es un patrón de archivos a excluir, por ejemplo

#.gitignore de ejemploLoRaWAN/MDK-ARM/output
LoRaWAN/Third_Party/STM32CubeExpansion_LRWAN/_htmresc
LoRaWAN/Third_Party/STM32CubeExpansion_LRWAN/Projects
LoRaWAN/Third_Party/STM32CubeExpansion_LRWAN/Drivers/STM32L1xx_HAL_Driver
LoRaWAN/Third_Party/STM32CubeExpansion_LRWAN/Drivers/STM32L4xx_HAL_Driver
LoRaWAN/Third_Party/STM32CubeExpansion_LRWAN/Drivers/CMSIS/Lib/IAR

Mover archivos

$ git mv pedro.c juan.c

Y acordarse después hacer "status" y "add" según interese.

Hacer commit

Hacer un «commit» es hacer una «foto» del estado actual del proyecto y meterla en la historia del proyecto.

Antes de proceder es bueno hacer un «status» por si se nos ha olvidado algún archivo

$ git status

Si todo está bien, hacemos el ‘commit’ y le asociamos un mensaje explicativo,

$ git commit -m 'Primer commit'

Con log podemos ver por dónde estamos

$ git log
commit 356789fa7d25e98aeac4c71d1d7a212c87ba27e8 (HEAD -> master)
Author: Angel Perles <aperles@disca.upv.es>
Date: Sun Apr 26 20:16:49 2020 +0200

 

Push a bitbucket

Crear el repositorio en bitbucket,

Configurar el repositorio local para que el «origin» sea Bitbucket

$ git remote add origin git@bitbucket.org:microris/cc_node_b-l072z-lrwan1.git
$ git push -u origin master

Lo más seguro es que dé un error de permiso denegado.

Seguir https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html para crear una ssh-key

 

Gestionar ramas (branch)

Las ramas permiten trabajar con distintas variantes del proyecto que, una vez estabilizadas/probadas/etc. pueden ser combinadas con la rama principal.

Todas las operaciones previas se hacen sobre la rama en la que estemos trabajando actualemente sin afectar al resto de ramas.

Se puede usa git checkout para saber en la rama en la que estamos.

Crear un rama

Para crear una nueva rama de trabajo se usa

$ git branch [nombre_rama]

Por ejemplo

$ git branch reorganization

Se acaba de crear una rama, pero creo que se sigue estando en la rama anterior. Comprobarlo con «checkout». Si se hace lo del siguiente punto sí se ve qu estamos en la otra rama (COMPROBAR)

Moverse a una rama

$ git checkout [nombre_rama]

 

 

ACI ME QUEDAT ####

Aci ficar com crear i despres pujar a bitbucket

 

 

Enlaces

Resúmenes

GitHub Cheat sheet English (pdf)

 

https://git-scm.com/docs

https://www.atlassian.com/git/tutorials

 

Simulation & emulation of the STM32F4-discovery board

Rationale

The reason for using an STM32 discovery board is its affordability. That’s why I suggested in class that it be purchased for home play.
The course’s lab activity has been designed in such a way as to enhance that possibility, so open-source software and/or limited versions of commercial software are used to allow you to create your own home lab environment.
Using affordable tools maximizes the possibility of entering this complex world of microcontrollers.

I insist that the recommendation is still to get one of these boards. Even in the current situation.

That said, the current situation of confinement at home needs new approaches, so I am trying to find alternative solutions.

The proposal would be to try to simulate/emulate the discovery plate in order to develop the practical activities and the mini-project.

The truth is that I have not found many free/demo/etc options (for example, using Proteus is discarded because I don’t have student licenses for the STM32 module).

The proposal is to use the Keil to simulate non-peripheral code and to use QEMU for ARM to emulate the board.

Simulating with Keil uVision 5

Keil uVision 5 includes a simulator that lets to run code without the need for hardware. Great … but there is a problem. I’d rather start by showing you so you can understand.

Let’s build the template … -> go to Options of the project -> C/C++ and verify that the compiler optimizations are disables

Let’s go to Debug -> Activate the simulator …

Ok, let’s start the Debugging session, play … WHAT THE HELL IS THAT ERROR!!!

Well, further reading highlights that only the ARM Cortex-M core is simulated, not the manufacturer-specific characteristics such as the devices. In this case, «*** error 65: access violation at …» means that the debugger complains because of the access to a memory position of a peripheral that does not exist in the ARM Cortex-M core.

it is feasible to «step over» these instructions, but a more elegant option is to say to the debugger that it can read-write these positions. To do that, create a .ini file including the following text.

MAP 0x40000000,0x400FFFFF read write

call it keil_lamarequeva.ini for example, and include it in the configuration of the debug session.

And working. See below an example of session with breakpoints and checking the values of some variables.

BUT only the «normal» C/C++ code is being evaluated. No peripherals can be tested here.

I suggest this procedure to test the logic of the application. When the application has been developed, then I suggest going to the next section.

Emulating the Stm32f4-discovery

The only «open» way that I found to emulate an STM32 microcontroller is using QEMU.

There is a project named xPack QEMU Arm which purpose is to emulate ARM Cortex-M based microcontrollers and bords. In fact, it supports the STM32F4-Discovery, great!!.

Let’s start installing, you can do it yourself reading the xPack QEMU install instructions. More or less, this is a digest of the steps:

  • Assuming MWindows 10, download xpack-qemu-arm-xxxx-win32-x64. zip from the GitHub releases repository
  • Uncompress the zip file a move it to C:\Users\<your user>\AppData\Roaming\xPacks You can’t view this directory using Windows Explorer, but it exists. You can use the navigation bar to access it. Do not worry if you see «Usuarios» because it is an «alias» of «Users»

  • Check that QEMU operates correctly opening a command window and writing
C:\Users\aperles>"C:\Users\aperles\AppData\Roaming\xPack\QEMU ARM\2.8.0-8\bin\qemu-system-gnuarmeclipse.exe" --version

 

If it works, then you can now build your Keil project a load the resulting image file in QEMU.

For example, I adapted the official template to handle a LED as shown in the next image,

After building the project, and for this specific template, the image file is stored in subfolder «output» and named «plantilla_ITM_debug.axf«. In a different project, simply locate the corresponding».axf» file.

Now load the image using the emulator in the following way adapting routes to find the .axf file if necessary,

H:\tmp>"C:\Users\aperles\AppData\Roaming\xPack\QEMU ARM\2.8.0-8\bin\qemu-system-gnuarmeclipse.exe" --board STM32F4-Discovery --mcu STM32F407VG -d unimp,guest_errors --semihosting-config enable=on,target=native --image plantilla_ITM_debug.axf

And, alehop!!!, your project will show up running in the discovery board.

Let’s go for the LIMITATIONS:

  • You cannot debug your project in this way. It is feasible, but you need a GDB-based debugger and this completely out of the scope of this trick. BUy a real Discovery.
  • Only a limited set of peripherals is emulated. I think that GPIO, including LEDs and button operation, and some interrupts, but not sure at all. Any volunteers to try?.

More information:

https://xpack.github.io/qemu-arm/options/

 

 

ARM Cortex-M práctico. 1 – Introducción a los microcontroladores STM32 de St

¿Qué es esto?

Estoy poniendo por escrito las clases, cacharreos, explicaciones, etc. sobre microcontroladores ARM Cortex-M. Como hay gente que me lo pide, he decidido dejar aquí un borrador de las anotaciones junto con el material adicional.

Los apuntes

Ten en cuenta la licencia con la que se publican estos apuntes.

Descarga «ARM Cortex-M práctico. 1 – Introducción a los microcontroladores STM32 de St»

Código fuente

Bibliotecas y plantillas varias asociadas a los apuntes.

Ejemplos

Otros

Documentación de referencia de St

Son copias locales con la versión empleada en los apuntes. Acudir a la web de St para comprobar la última versión

Serie STM32F4. Superpotencia

Serie STM32L4. Potente y ultrabajo consumo

Enlaces de interés

De momento los voy soltando como caen

Bibliografía adicional

Libros interesantes que complementan de maravilla.

De ebiblio al Kindle

Motivación

La bibliotecas públicas se están modernizando y ya es posible ir virtualmente a la biblioteca y coger un libro electrónico. ¡Bien hecho!.

¡Vaya! Veo que la «pega» es que los contenidos están protegidos y quizá no se puedan leer en tu lector preferido. Yo tengo 4 estupendos Kindle y, como cabía esperar, no permiten este tipo de contenido. Todo el problema está en el tema de derechos de las obras.

Pues no me da la gana tirar los Kindles porque las bibliotecas públicas que pagamos todos usen formatos protegidos (tiene su lógica y su ilógica), así que, a petición de la audiencia, explico como saltarse el problema.

A TU RESPONSABILIDAD.  Y NO PIRATEES, LO PONES EN EL KINDLE, LO  LEES Y LO BORRAS A LOS 21 DÍAS

(Si ahora me comprase un lector de libros, posiblemente fuese el BQ Cervantes (Android), pero sigo contentísimo con los Kindle).

Ebiblio

Ebiblio es la iniciativa de biblioteca pública nacional + autonómica. Para la Comunitat Valenciana se entra por http://comunitatvalenciana.ebiblio.es

Necesitamos tener carnet de las bibliotecas valencias en vigor y usar el pin que se nos entregó en su momento para acceder a los contenidos. El usuario es tu DNI.

La lectura se puede hacer en distintos formatos con un préstamo temporal de 21 días de préstamo. El formato más cercano a nuestro Kindle es el formato ebook para Adobe.

Simplemente buscamos el libro que nos interese.

 

Y bajamos un archivo que es el que nos da acceso a la verdadera descarga del libro. Guárdalo en un lugar que recuerdes.

 

Adobe® Digital Editions

Para leer el libro protegido con Adobe DRM (ADE) se necesita la aplicación Adobe® Digital Editions que se puede descargar de http://www.adobe.com/es/products/digital-editions/download.htm

Para poder leer contenidos protegidos es necesario autorizar el computador mediante un identificador que se obtiene de la propia Adobe. Entrar en “Ayuda-> Autorizar equipo …”

Ahora ya podemos abrir el libro. Vamos a “Archivo → Importar» y localizamos el directorio donde hemos depositado el archivo anterior. Por defecto se espera importar epubs y similares, así que habrá que marcar la opción “Adobe Content Server Message” (ver parte inferior derecha de la imagen).

Y en unos segundos … tachán !!!! Aquí lo tenemos (con fecha de caducidad de 21 días).

 

Lo que hemos descargado es un libro en formato epub customizado y blindado. Es importante saber dónde está el libro para los siguientes pasos. Para localizarlo, ir a “Archivo → Mostrar en explorador”.

 

Nota: Como ya hemos instalado ADE, la próxima vez que descarguemos algo de ebiblio se agregará automáticamente y no será necesario este paso.

Calibre

Ahora necesitamos la herramienta preferida de los amantes del libro electrónico; “Calibre”. Descargar e instalar desde https://calibre-ebook.com/

Con el asistente, puedes configurar tu Kindle (lógicamente, no voy a explicar eso o no tiene sentido que sigas).

Una vez configura, puedes probar a obtener algún libro gratuito con «Obtener libros» -> Feedbooks.com -> Dominio público» o cualquier otra tienda. Por ejemplo, la siguiente imagen muestra «el libro de buen amor» del Arcipreste de Hita.

 

DeDRRM plug-in para calibre

Antes de seguir con calibre, hay que instalar el “plug-in” (complemento)  encargado de eliminar la protección DRM. Habrá que pegarse un poco con el inglés, pues en el siguiente «post» tienes la explicación de la falla:

DeDRM plugin for calibre: the simplest option for removing DRM from most ebooks

Ahora descarga las herramientas del “post” más reciente disponible intentando entender el inglés para poder bajarse un archivo comprimido en ZIP. El post más reciente debería estar en https://apprenticealf.wordpress.com/

Descomprimir el archivo descargado. Se podrá ver una carpeta con el nombre “calibre pulg-in” y las instrucciones en inglés.

Ahora vamos a calibre y seguimos, más o menos, estos pasos (puede ir cambiando):

  • Preferencias -> Cambiar comportamiento
  • Avanzado → Complementos
  • Cargar complemento desde un archivo -> y localizamos del DeDRM_plugin.zip e instalamos … evidentemente te avisa de que no sabe que es eso y que tienes riesgo de que sea un virus ES COSA TUYA SI SIGUES (At your own risk!!!).
  • Cerramos Calibre y lo abrimos de nuevo DOS VECES.

Calibre de nuevo

Bueno, bueno. Vamos a importar el libro deseado localizando el “ epub” como se hizo en la sección “Adobe …”.

  • Vamos a “Añadir libros”, lo localizamos, abrimos y se importa.
  • Ahora la prueba de fuego. Abre el libro y, si se ve, “tachánnnnnn” ya no hay DRM.

Y al Kindle

Ahora hay que convertirlo y pasarlo al Kindle. No tengo práctica con eso, pero trasteando un poco …

 

Y no lo explico. No es el objetivo de este post.

Generar calendarios chulos con «pcal»

Todos los años me toca preparar un calendario en papel para que mi padre apunte cosas.

La última vez decidí localizar alguna utilidad para Linux que me permitiese generarlo desde la línea de órdenes y salió bastante bien. Este año me ha tocado recordar la orden y chuparme el man, así que lo apunto y se acabó.

La utilidad es pcal, que se puede obtener http://pcal.sourceforge.net/  o, más rápido, usando los repositorios de nuestra distribución de Linux. Por ejemplo, en Debian/Ubuntu

$ sudo apt-get install pcal

Para obtener mi calendario del 2016, uso lo siguiente

$ pcal -F 1 -P a4 -x1.05 -X-20 -y1.05 -S -a es -b all -o calendari-2016.ps 2016

Que genera el calendario de todos los meses del año en formato postscript apaisado que vuelca en el archivo calendari-2016.ps

Para que salgan todos los meses del año más unos extras se le puede decir que empìece en el més «1» y saque «15» meses, es decir, hasta marzo

$ pcal -F 1 -P a4 -x1.05 -X-20 -y1.05 -S -a es -b all -o calendari-2022.ps 1 2022 15

Como lo quiero en A3, lo convierto a pdf.

$ ps2pdf calendari-2016.ps calendari-2016.pdf

Y lo imprimo con Adobe reader diciendo que lo adapte a A3.

Hala, a otra cosa. El año que viene le añadiré cumples y alguna foto, a ver si es verdad.

Tips collection for good quality code development

Introduction

Well, I have lots of sparse links and forgotten books about project development in C. I decided to put here for my own reference and as a recomendation for people asking me (I will «copy and paste from here).

 

Style guides

A recommended coding standard

 

OLD content bellow

 

Most of my students produce horrible code from the point of view of style.

There are lots of diverging style guides for C programming, so a couple of small and coherent ones will be sufficient for my pourpose.

 

Other (too complex for starters).

 

Repositories management

For professional developers (and not so professionals), it is a must to use a «repositories» for managing the code and documents of an evolving project.

Actually, I’m using «mercurial» for this pourpose BUT …

My recommendation is to use «GIT».  The reason is: it is distributed, it is very well accepted by the community.

You need a hosting service for your code repository. I recommend to start with «bitbucket» if you want a private repository, but if your project is clearly open, you can use «github» or «gitorius».

 

Industry standards

C language is prone to errors but it is the only option for developing embedded systems. In order to reduce the amount of typical coding errors, it is a good idea to use some of the well stablished industry standards that try to minimise these errors.

The recommendation is to elect one of these (I suggest MISRA ):

  • Guidelines for the Use of the C Language in Critical Systems (MISRA C: 2012); Motor Industry Software Reliability Association,2013. MISRA site
  • The CERT C Coding Standard: 98 Rules for Developing Safe, Reliable and Secure Systems; Robert C. Seacord, 2014. Cert C official site
  • Embedded C Coding Standard; Michal Barr, 2008

 

Bug detection at the developing stage

ASSERT

8 tips for squashing bugs using ASSERT in C

 

 

Others

I’m reading

  • Test Driven Development for Embedded C (Pragmatic Programmers); James W. Grenning, 2011

To be considered

  • Linux for embedded and real-time applications; Doug Abbott,2013

 

Comentarios curso Raspberry Pi (3ª edición)

En este hilo iremos insertando instrucciones y contestando consultas de la 3ª edición.

 

 

Rotando la pantalla y el digitalizador del tabletPC en Linux

Una pega del tabletPC en Linux es que la rotación de la pantalla X no suele llevar asociada la rotación del digitalizador tipo Wacon.
Buscando información, parece factible hacerlo modificando la configuración de las X; pero como no le veo mucho futuro a ese tipo de configuraciones, prefiero intentar hacer algo desde la línea de órdenes.
Por tanto, el objetivo va a ser lograr un script para la línea de órdenes que se encargue de rotar la pantalla en cualquiera de las 4 posibilidades y ajustar el digitalizador de acuerdo a esta rotación. La siguiente imagen muestra el resultado deseado.

Para la rotación de pantalla, lo más adecuado parece ser utilizar la orden xrandr, por ejemplo, para rotar la pantalla a izquierdas se haría:

$ xrandr --orientation left

Para reajustar el digitalizador. parece que la opción es emplear el comando xsetwacom sobre el dipositivo deseado. Para conocer el dispositivo, se puede hacer desde la línea de órdenes:

$ xsetwacom --list devices
Serial Wacom Tablet stylus              id: 13  type: STYLUS
Serial Wacom Tablet eraser              id: 15  type: ERASER

Y para rotar el stylus, se puede hacer:

$ xsetwacom set ”Serial Wacom Tablet stylus” Rotate ccw

Con todo esto, ya se puede preparar un script sencillo para hacer las rotaciones. Ahí va el que me he preparado en python.

#!/usr/bin/env python

# tabletPC rotation of screen and wacom enabled digitizer
# for X enabled devices 
# Syntax: tablet_rotation {normal,left,right,inverted}

import sys
import os

#identifier of the wacom
#obtained using command xsetwacom --list devices
wacom_id = 'Serial Wacom Tablet stylus'

# function for setting the rotation mode
# values can be "normal", "left", "right", "inverted"
def orientation(value):

  screen_cmd_prefix = "xrandr --orientation "
  wacom_cmd_prefix = "xsetwacom set  "" + wacom_id + "" Rotate "

  if value == "normal":
    os.system(screen_cmd_prefix + "normal")
    os.system(wacom_cmd_prefix + "none")
  elif value == "left":
    os.system(screen_cmd_prefix + "left")
    os.system(wacom_cmd_prefix + "ccw")
  elif value == "right":
    os.system(screen_cmd_prefix + "right")
    os.system(wacom_cmd_prefix + "cw")
  elif value == "inverted":
    os.system(screen_cmd_prefix + "inverted")
    os.system(wacom_cmd_prefix + "half")
  else:
    print "Invalid orientation specified!"

if len(sys.argv) == 2:    
  orientation(sys.argv[1])
else:
    print "Syntax %s {normal,left,right,inverted}" %(sys.argv[0])

No me gusta que el que el ajuste del digitalizador dependa de una orden propia del dispositivo. Supongo que habrá alguna manera más elegante de hacerlo (¿quizá xinput?). Otro día será.

Instalando Latex manualmente en Linux

Razonamiento

Estoy en el estupendo curso de Latex de Adolfo Hilario y José Vct. Salcedo y, por supuesto, voy a usar Linux para trabajar.
Aparentemente todo va bien, hasta que topamos con el primer inconveniente al intentar usar la plantilla Latex de la UPV. El documento ejemplo no compila por problemas con el paquete siunitx.
Analizando un poco el problema, parece que la causa es que el paquete instalado es relativamente anticuado (del 2009). La instalación de Tex (Latex, y demás) de mi Ubuntu 12.04 LTS la he hecho desde los repositorios de Canonical, por lo que los paquetes no son los últimos.
A los que usan Windows no les pasa sin usan al gestor MikTex, que se encarga de actualizar automáticamente los paquetes. Una maravilla (y que rabia).

Paciencia, que creo que tenemos estas opciones:

  1. Bajar el paquete siunitx en código fuente, compilarlo y machacar el antiguo.
  2. Cambiar los repositorios de Linux con un nuevo ppa que apunte a un repositorio más nuevo.
  3. Hacer una instalación manual de la última versión de las herramientas Tex.
  4. Usar MikTex para Linux (es una Beta)

De todas las opciones, creo que la «3» será la más razonable, así que vamos a ello y que no nos «pase na».
Voy a seguir y adaptar las instrucciones disponibles en http://tug.org/texlive/quickinstall.html. Algunos paso los modifico según mis necesidades específicas, así que, antes de seguir esta propuesta, sería interesante mirar el anterior documento.
Optaré por una instalación a lo bruto donde se bajarán todos los paquetes. Eso son unos 3 GBytes.

Preparando el instalador de red

Para empezar se propone crear un directorio de trabajo y descargar en él llamado instalador install-tl

Abrimos un terminal y hacemos:

mkdir texlivetmp
cd texlivetmp
wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar xzvf install-tl-unx.tar.gz

Lo anterior también se puede hacer desde un explorador de archivos.

Instalando

Para que la instalación sea más amigable, usaremos una versión gráfica. Antes de continuar, instalaremos el paquete perl-tk en Linux.

sudo apt-get install perl-tk

Ahora vamos con el instalador en sí. Desde un terminal, ir al directorio donde se han descomprimido los archivos y ejecutar

./install-tl --gui perltk

Debería aparecer la siguiente ventana.

En rojo se nos avisa de que no se tiene acceso a determinadas rutas de directorio. Mejor así, haremos una instalación local para no arriesgarse a romper el sistema. Así que cambiaremos la opción TEXDIR a una ruta local. En mi caso ha sido ~/texlive/…

E instalamos … 3 horas después ya lo tenemos listo.

Configurando rutas

Ahora hay que arreglar las rutas de búsqueda de ejecutables, etc. para que se usen las herramienta Tex que hemos instalado y no las que hay por defecto en el sistema.

La manera de hacerlo dependerá de la configuración del Linux sistema. En mi caso he editado el archivo .profile y he añadido

export PATH=${HOME}/texlive/2012/bin/i386-linux:$PATH
export MANPATH=${HOME}/texlive/2012/texmf/doc/man:${MANPATH}
export INFOPATH=${HOME}/texlive/2012/texmf/doc/info:${INFOPATH}

Primera prueba

Abrimos un nuevo terminal para asegurarnos de que se establecen las rutas.
Comprobamos que las rutas están bien, por ejemplo haciendo:

$ which latex
/home/aperles/texlive/2012/bin/i386-linux/latex

Probamos con un documento sencillo ya incorporado:

mkdir prova
cd prova
latex small2e

Si se compila bien, se habrá creado un archivo .dvi. Podemos visualizarlo de la siguiente manera

evince small2e.dvi

La prueba definitiva

Vamos ahora a por la plantilla Latex UPV de Adolfo y José Vcte. Salcedo.

Si no hemos rearrancado la máquina, podemos aprovechar el terminal del paso anterior para lanzar texmaker a mano sabiendo que las rutas ya están bien. Haremos,

texmaker &

Abrimos la plantilla, limpiamos la caché, recompilamos … tachannnn!!! ¡A funcionar!.

¿Y las actualizaciones?

Con esta instalación tenemos la ventaja adicional de poder estar a la última y actualizar los paquetes con facilidad usando la herramienta tlmgr.

Por ejemplo, para ver la versión instalada del paquete siunitx podemos hacer en el terminal:

$ tlmgr  info siunitx
package:     siunitx
category:    Package
....
cat-date:    2012-12-30 01:13:01 +0100

Y vemos que el paquete es bastante nuevo.

Para ver todas las actualizaciones disponibles sin tocar nada, haremos:

tlmgr update --list

Y para actulizarlo todo:

tlmgr update --all

Ya puestos, actualizar TexMaker

Ya puestos, si usas TexMaker es la ocasión perfecta para que lo actualices a la última versión. Vale la pena.

En tu gestor de paquetes preferido desinstalas el que viene en tu distribución.

Vas a la página de descarga de TexMaker y seleccionas la que cuadre con tu distribución.

Bon profit!