Android RenderScript: Solution to ‘Cannot find symbol’ forEach_root

17/06/2013

I’ve been playing around with RenderScript and found a problem only referenced in this StackOverflow question. Unfortunately, my solution brings another problem with it because it makes the app incompatible with my cellphone.

Anuncios

Ubuntu ARM toolchain compiles Stellaris USB examples correctly

22/12/2012

I managed to get the StellarisWare libraries and examples working without Sourcery Codebench. Based on these two articles:

The complete StellarisWare suite compiles without errors, and the examples I tried (including usb_dev_serial and usb_dev_mouse) work correctly. This is an improvement over summon-arm-toolchain, which compiled non-functional USB examples.

Instructions for Ubuntu 12.10:

  1. # Install toolchain
    sudo aptitude install gcc-arm-linux-gnueabi
    # Download and compile newlib (had trouble with the toolchain's libc and libm)
    wget ftp://sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz
    tar xzf newlib-1.18.0.tar.gz
    cd newlib-1.18.0/
    ./configure --target arm-linux-gnueabi --disable-newlib-supplied-syscalls
    make

    This makes the files libc.a and libm.a in the subdirectory arm-linux-gnueabi/newlib

  2. Unzip the StellarisWare files, and in the root directory edit makedefs. Search for the following settings and change them, replacing something with the directory where you unzipped newlib
    PREFIX=arm-linux-gnueabi
    LIBC=/something/newlib-1.18.0/arm-linux-gnueabi/newlib/libc.a
    LIBM=/something/newlib-1.18.0/arm-linux-gnueabi/newlib/libm.a

    Also change CFLAGS, adding the line with -fno-stack-protector, so it looks like this:

    CFLAGS=-mthumb             \
           ${CPU}              \
           ${FPU}              \
           -Os                 \
           -ffunction-sections \
           -fdata-sections     \
           -MD                 \
           -std=c99            \
           -Wall               \
           -pedantic           \
           -DPART_${PART}      \
           -fno-stack-protector \
           -c
  3. To compile everything, run make clean and make

USB Mouse example for Stellaris Launchpad

10/12/2012

With some help I got the USB Mouse example from the LM3S9D90 board working on the Stellaris Launchpad. It needed a few changes:

  • Replaced the linker script usb_dev_mouse.ld with one from the Launchpad examples. The only difference was the size and location of the FLASH and SRAM memory regions.
  • Added code to configure the USB pins at startup, as suggested by dellwoodbu.
  • Changed several lines in the Makefile:
    • PART=LM4F120H5QR
    • VARIANT=cm4f
    • Set ROOT to my StellarisWare directory as usual
    • Added a target for programming the board:
      .PHONY: download

      download: ${COMPILER}/usb_dev_mouse.bin
          lm4flash -v $<

    • Replaced all instances of “cm3” with “cm4f”
    • CFLAGSgcc=-DTARGET_IS_BLIZZARD_RA2

You can download the example project files. Remember to set ROOT in the Makefile to your StellarisWare directory.

Warning: it does not work when compiled with the Summon Arm Toolchain. It compiles without errors but the device fails to enumerate. It responds to descriptor requests with malformed USB packets (seen with Wireshark). Works fine if compiled with Sourcery Codebench, haven’t tried other toolchains.

15/11/2012

My Stellaris Launchpad finally arrived. I’ve been following this tutorial for programming it on Linux successfully.

However, I was annoyed at having to run the flashing utility as root. So I created a udev rule that gives the board’s device file the proper permissions. First, create a group called stellaris and add yourself to that group:
sudo addgroup stellaris
sudo adduser $USER stellaris

Then create the udev rule. Create the file /etc/udev/rules.d/45-stellaris.rules with the following contents:
ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="0664", GROUP="stellaris"
What does this mean? This line consists of key-value pairs separated by commas.

  1. The first two are match keys: when something is plugged in, udev checks if its vendor and product IDs match the ones here.
  2. The last two are assignment keys: if there’s a match, the device file is created with the specified permissions and group. These permissions mean that the owner (root) and members of the the group stellaris can read from and write to the file, while others can only read.

You might have to restart your terminal in order for it to recognize you’re now in the stellaris group. You can also run
exec su -l $USER

Collaborative latex editing with Dropbox and inotifywait

10/11/2012

I’ve settled on this workflow for writing lab reports in a group:

  • We share a folder with Dropbox that holds the measurements and report files (graphs, latex source files).
  • To prevent collisions we use separate .tex files for different sections, and split the sections between group members.
  • To make sure the output is consistent, only one person compiles the PDF. Inspired by this blog post I wrote a short script to build the PDF whenever a file changes:
#!/bin/bash

while true
do
    echo Compiling
    pdflatex -interaction nonstopmode -file-line-error informe.tex &>salida.log
    inotifywait -e modify -r .
done

Previously I’d tried running

make

in a loop (it only compiles if one of the input files changed). However, this script automatically checks all files for changes, without having to add them to a Makefile.

Configurar un servidor virtual en Apache2

06/08/2012

Me gusta mantener mis proyectos web organizados. Una forma de lograr esto con Apache2 es usando Virtual Hosts. Así Apache espera pedidos en una sola IP, pero según el dominio que se pida, sirve un sitio distinto.

Voy a explicar cómo crear un servidor virtual para pruebas locales, con el hostname notas.

Por el momento sólo configuramos el nombre del servidor y la ubicación de los documentos.

Crear como root el archivo /etc/apache2/sites-available/notas con el contenido:

<VirtualHost *:80>
    ServerName notas
    DocumentRoot /home/ignacio/notas
</VirtualHost>

Para activar el sitio, hay que hacer un link simbólico.

# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/notas 123-notas

(el número tiene que ver con el orden en que se cargan los archivos, no tiene mucha importancia).

Hay que instruirle a apache que vamos a usar servidores virtuales por nombre de dominio. Para eso, agregar al final de /etc/apache2/apache2.conf  la línea

NameVirtualHost *:80

Para que recargue la configuración,

# service apache2 reload

Por último, para que el dominio notas resuelva a nuestra PC, cambiamos /etc/hosts. En mi caso, cambié

127.0.0.1 localhost

por

127.0.0.1 localhost notas

Para probar la configuración, creamos la carpeta /home/ignacio/notas y el archivo /home/ignacio/notas/index.html con algún contenido como “Hola, mundo!”.
Apuntamos el navegador a http://notas/ y debería verse correctamente.

Estudiando la curva misteriosa

18/06/2012

Hace unos años estaba aburrido y me puse a dibujar en una hoja cuadriculada. Encontré un dibujo interesante dibujando segmentos de cierta forma. Empezaba haciendo un segmento del borde izquierdo al inferior. Luego otro, pero que empezaba un poco arriba y terminaba un poco a la izquierda.




Siguiendo así se va formando una grilla muy loca y una curva particular. El otro día me propuse encontrar una función que la describa. Lo primero es darle un nombre a cada una de las rectas que dibujé. Para esto digo que la recta t es la que empieza en (x,y)=(0,t) y termina en (x,y)=(1-t,0).

La ecuación de la recta t es y=t-\frac t{1-t} x.

Ahora quiero ver dónde queda la envolvente. Para esto busco la intersección entre la recta t y una muy cercana, t+dt.

Hay que combinar las ecuaciones

y=t-\frac t{1-t} x
y=t+dt-\frac {t+dt}{1-t-dt} x

Tomando límite con dt\to0 llegamos a que

x = (1-t)^2
y = t^2

Expresando todo en función de x encontramos y = (1-\sqrt x)^2

No es un círculo, ni siquiera sé si tiene nombre.

Visualizador del espectro de una señal

13/10/2010

Hice un programita que permite dibujar un período de una señal y ver su espectro de Fourier. Por ahora permite darle un valor inicial a la señal, ya sea una constante o ruido, cambiarle valores con el mouse y modularla con una frecuencia a elección. El código está disponible en github.

Simulación de ondas

02/10/2010

Estoy desarrollando un simulador de ondas con Python, Qt4 y OpenGL.
Por el momento permite visualizar modos normales de una cuerda. A la brevedad voy a agregar controles para poder variar los modos, condiciones de borde, etc. sin tener que meter mano al código.
Se encuentra disponible aquí

Administrador de materias para la facultad

02/10/2010

Estoy escribiendo en Python un programa que toma una lista de materias y correlativas, y permite ver cosas como

  1. Correlativas de una materia
  2. Qué me falta aprobar para poder cursar algo
  3. Materias a las que me puedo anotar

El código está disponible en github