Archive for the ‘Code snippets’ Category

Ocultando contactos SIM con un temporizador

Domingo, noviembre 29th, 2009

Windows Mobile 6.1 tiende a mostrar en la agenda tanto los contactos de la agenda del teléfono como los almacenados en la tarjeta SIM. Y digo tiende porque a menudo nos encontramos que los muestra aún habiendo configurado el sistema para que los oculte.

Mientras que los contactos de la agenda del teléfono pueden almacenar varios números de teléfono, direcciones de correo electrónico y web, direcciones postales y demás datos interesantes, los contactos de la SIM sólo pueden almacenar nombre y número de teléfono, lo que los hace mucho menos útiles. Siempre tenemos la opción de borrarlos de la tarjeta SIM, pero si nuestro terminal sufre un percance o se queda sin batería en un momento importante, podría ser útil tener algunos contactos importantes en la SIM.

Así que la mejor solución pasa por ocultarlos. Esto puede hacerse con unos cuantos programas disponibles en la red, que generalmente lo que hacen es poner un cero en la clave de registro “HKCU\ControlPanel\Phone\ShowSIM” (Si no sabes de lo que estoy hablando… mejor no toques nada en el registro).

El problema surge porque en algunos terminales, este valor se pone a 1 (mostrando los contactos de la SIM) automágicamente en algún momento del arranque, así que aunque instalemos un programa que lo pone a 0 tras hacer un soft-reset, a menudo nos encontramos conque no ha funcionado y los contactos de la SIM vuelven a estar ahí… Mal.

¿Una posible solución? Hacer un programa que vuelve a poner el ShowSIM a 0, pero esta vez con un retardo, 120 segundos por ejemplo, de este modo esquivamos el problema y a los dos minutos desde el arranque se ocultarán los contactos que no queremos ver… Fácil, ¿no?

Ya hay un par de programas por ahí que hacen algo así, pero en realidad es algo relativamente sencillo y tenía ganas de aprender a hacer programas “de consola” para windows mobile, así que… Ahí va algo de código experimental, por si os interesa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Threading; // To Sleep
using System.Runtime.InteropServices;  // For dllimport
using Microsoft.Win32; // For Registry access :-)

namespace pimhider
{
    class Program
    {
        [DllImport("coredll.dll")]
        public static extern IntPtr SetCursor(IntPtr hCursor);
        static void Main(string[] args)
        {
           
            IntPtr hOldCursor = SetCursor(IntPtr.Zero); // Hide the "waiting" cursor
            Thread.Sleep(120*1000); // Sleep for some time
            String regPath = Registry.CurrentUser + "\\ControlPanel\\Phone\\";
            Registry.SetValue(regPath, "ShowSIM", 0); // And hide the contacts!
        }
    }
}

En mi teléfono funciona, pero no me hago responsable de que en otro lo haga, o de que le pasen cosas malas al terminal o incluso a la tostadora. Usar con precaución ;-)

Forzando la barra de desplazamiento con CSS

Viernes, noviembre 27th, 2009

Si utilizas CSS para maquetar una página web, es posible que hayas topado con un pequeño problema al centrar el contenido en la página utilizando algo como esto:

1
2
3
#contenedor {
    margin: 0 auto;
}

Eso efectivamente centra el contenido. Pero el problema surge cuando cargas una página que es más alta que la ventana del navegador… Esto hace que aparezca la barra de desplazamiento en el navegador, con lo que el contenido se vuelve a centrar, dando un pequeño salto hacia la izquierda… Lo que es, como mínimo, molesto.

Googleando por ahí he encontrado una página donde explican cómo forzar a que siempre aparezca la barra de desplazamiento, aunque no haga falta, con lo que evitamos el problema. No es lo más elegante seguramente, pero bueno, para ser viernes no está mal: css-tricks.com.

En resumen: Basta con añadir lo siguiente a nuestro archivo CSS:

1
2
3
html {
    overflow-y: scroll;
}

Write text to file in C#

Martes, octubre 20th, 2009

To write a text in a file in windows mobile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Text;
using System.IO;

{
  StreamWriter tw = null;
  string log_name = "\\foo.txt";
  string st_toFile = "bar";
  tw = new StreamWriter(log_name);
  tw.WriteLine(st_toFile);
  if (tw != null)
  {
    tw.Flush();
    tw.Close();
  }
}

Remember catching possible errors if output directory doesn’t exist!

Quick ‘n’ dirty Makefile

Miércoles, octubre 14th, 2009
1
2
3
4
5
6
7
8
GCC=g++
CFLAGS=-Wall
OUT=foo
OBJS=foo.o
all: $(OBJS)
    $(GCC) $(CFLAGS) $(OBJS) -o $(OUT)
clean:
    rm -f $(OUT) *.o

More here

Matlab: Low pass filter

Lunes, agosto 24th, 2009

Simple lowpass filter code for matlab, suitable to remove high frequency noise from measures.

This code filters 3 columns of data (plus an index in first column) and displays a plot with the original and filtered data. After that, it does it again using a different lowpass equation, just for comparision.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function y = lowpass(x,dt,RC)

% y=lowpass(data,dt,RC);
% data (x) rows: [ sample_num, X_value, Y_value, Z_value]
% output (y) rows: [X_value, Y_value, Z_value, X_filtered, Y_filtered, Z_filtered]

alfa= dt / (RC + dt)
num=length(x)
cols=4;
for j=1:cols
y(1,j)=x(1,j);
end
for i=2:num
for j=2:cols
y(i,1)=x(i,1);
y(i,j) = alfa * x(i,j) + (1-alfa) * y(i-1,j) ;
end
end
figure
hold on
y=cat(2,x(:,2:4),y(:,2:4))
plot(x(:,1)*dt,y)
title(['low1 RC=',num2str(RC)])
legend('X','Y','Z','Xf','Yf','Zf')

% Alternative lowpass
a = exp(-dt / RC);
b = 1.0 - RC * (1.0 - a) / dt;
c = 1.0 - b - a;
for i=2:num
for j=2:cols
y(i,1)=x(i,1);
y(i,j) = a * y(i-1,j) + b * x(i,j) + c * x(i-1,j);
end
end
y2=cat(2,x(:,2:4),y(:,2:4))
plot(x(:,1)*dt,y2)
title(['low2 RC=',num2str(RC)])
legend('X','Y','Z','Xf','Yf','Zf')