Category Archives: Hardware

Whislist

Ya vienen las fiestas de Navidad y con ellas los ajetreos por hacer todas las compras de regalos… esto para mi padre, esto para mi madre, etc. ¡Y como no, los regalos para mi!

Una cámara fotográfica nueva. Para poder seguir haciendo fotografías increíbles. Como ya sabéis, personalmente me encanta la nueva Sony A77. En la sección de fotografía de Fnac, encontraremos esta fantastica cámara a un precio alucinante: 1301,07€.

Sony A77

Sony A77

Y ya puestos a pedir a Papá Noel o a los Reyes Magos, pues aprovecho para sugerir un iPad 2, de Apple, con WiFi y 3G con 32GB para poder mostrar las fotos que hagamos con la cámara y de paso leer el último comentario que nos dejen en Flickr, en 500px o en este blog de tecnología. Como es habitual, cualquier modelo de iPad se puede encontrar en cualquier tienda Fnac. Y concretamente este modelo a un precio espectacular: 699€.

iPad 2 de Apple con WiFi y 3G con 32GB

iPad 2 de Apple con WiFi y 3G con 32GB

¡Un abrazo a tod@s y que disfrutéis de las Navidades¡

Programador horario con Arduino

¡Hola a tod@s!

Últimamente estoy inmerso en un proyecto con Arduino. El proyecto en cuestión trata el diseño y programación de un controlador para la Pecera del Quinto. Uno de los primeros escollos a resolver es el programador horario y para ello he hecho la siguiente función. La función between(..) permite saber si la hora actual (o cualquier otra) está entre dos horas diferentes, además permite incluir una hora final en el siguiente día (ver ejemplo).

Código de la función:

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
/*
 * Between is a method to check if current time is between two different times (initial time and final time). This method supports a 'final time' in the next day.
 * @param currHour integer (0-23) with the current hour.
 * @param currMinute integer (0-59) with the current minute.
 * @param initHour integer (0-23) with the initial hour.
 * @param initHour integer (0-59) with the initial minute.
 * @param finalHour integer (0-23) with the final hour.
 * @param finalMinute integer (0-59) with the final minute.
 * @return true if the current hour is between the two times (initial and final)
 * @author Oscar Sanchez Montaner (OSanchezMon)
 */
public static boolean between(int currHour, int currMinute, int initHour, int initMinute, int finalHour, int finalMinute) {
    boolean result = false;
 
    // Converting times to minutes.
    int  on = initHour  * 60 +  initMinute;
    int now = currHour  * 60 +  currMinute;
    int off = finalHour * 60 + finalMinute;
 
    // If final time is in the next day...
    if (finalHour < initHour) { // ... must first check if current time is above 12AM (24)...
        if (now > off) {
	    now += 1440; // ... if it is above; increase it 1440 minutes.
	}
	off += 1440; // Final time (for the next day) is always increased 1440 minutes.
    }
    // Development information.
    if (DEBUG_ON) {
        Serial.print("On: "); Serial.print(on); Serial.print(", Now: ");
        Serial.print(now); Serial.print(", Off: "); Serial.println(off);
    }
    // Check if current time is between initial and final time.
    if (now >= on && now < off) {
        result = true;
    }
 
    return result;
}

En el siguiente ejemplo se quiere saber si la hora actual está comprendida entre las 23:10 y las 10:10 (de la mañana siguiente).

Ejemplo de utilización:

1
2
3
4
5
6
7
if (between(hora_actual, minuto_actual, 23, 10, 10, 10)) {
    if (!relay02On) {
      digitalWrite(relay02Pin, HIGH);
      relay02On = true;
      logger("Relay 02 enabled.");
    }
}

Resultados de diferentes casos de prueba:

1
2
3
4
5
6
between(9, 0, 23, 10,  8, 59)); // On: 1390, Now: 1980, Off: 1979 -> false
between(9, 0, 23, 10,  9,  0)); // On: 1390, Now:  540, Off: 1980 -> false
between(9, 0, 23, 10,  9,  1)); // On: 1390, Now:  540, Off: 1981 -> false
between(9, 0, 10, 10,  8, 59)); // On:  610, Now: 1980, Off: 1979 -> false
between(9, 0,  8, 10,  9,  1)); // On:  490, Now:  540, Off:  541 ->  true
between(9, 0,  8, 10,  8, 11)); // On:  490, Now:  540, Off:  491 -> false

Demuestran cómo interceptar llamadas GSM (2G) con una estación base casera

Armado con un equipamiento con un coste de 1.500 dólares compuesto por un ordenador, unas antenas y software libre, hizo que 30 teléfonos se conectaran a su sistema, y registró (y grabó) un total de 17 llamadas, tras deshabilitar el cifrado en la red.

Leer el post entero en BandaAncha: http://bandaancha.eu/articulo/7400/demuestran-interceptar-llamadas-gsm-estacion-base-casera

300.000 Lectores de DNIe "gratuitos"

A partir del 1 de Octubre, la compañía Tractis.Com en colaboración con otras empresas y el Gobierno, ha iniciado una campaña para distribuir 300.000 lectores para el DNIe, únicamente con el coste de los portes: 2€.

Para solicitar uno de los lectores, haz click aquí.

Oracle y Sun Microsystems la pareja de moda

Podemos leer en casi cualquier sitio como al final Oracle ha comprado, finalmente,  Sun Microsystems, dando un giro inesperado a la historia que empezó con IBM al acecho de Sun. Según se puede leer en la pagina web oficial de Sun el valor de la compra asciende a unos 7.400 millones de dólares (precio por acción : 9,50 $).

Ahora queda esperar como afectara este nuevo escenario a la tecnología Java y sobretodo a los RDBMS de Oracle y Sun. Recordemos que no hace mucho Sun Microsystems compro a MySql, por lo que ahora Oracle y MySql son hermanastros.

Open clients for virtualization.

VMWare has published an open client for Linux, and few months ago Sun Microsystems published the VirtualBox project under the GLP license.

Not so far, was very dificult or imposible to found an open project (under GLP, freeware, etc.) for virtualize a system.

What happends now?

Conocer la IP asociada a un interfaz de red (solo para Linux)

Transcribo una receta, de código Python, publicada en ActiveState Code por Paul Cannon, donde se ve como conocer la dirección IP asociada a un interfaz de red (bajo Linux) mediante la llamada a sistema ioctl SIOCGIFADDR.

1
2
3
4
5
6
7
8
9
10
11
import socket
import fcntl
import struct
 
def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915, # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

Ejemplo de llamada:

get_ip_address('lo')

Con resultado: 127.0.0.1

Otro ejemplo de llamada:

get_ip_address('eth0')

Con resultado: 192.168.50.19

Tal y como comenta el autor, probablemente esta solución únicamente funcione bajo Linux, dada la dependencia de este con ciertas estructuras (tamaño, etc.) en C y donde SIOCGIFADDR es 0x8915. Incluso es probable que únicamente funcione bajo kernels 2.4 y 2.6. Bajo otras distribuciones de Unix puede ser que requiera algún ajuste; que si alguien sabe siempre será bienvenido.

Stanford Engineering Everywhere

A set of courses about introduction to computer science, introduction to artificial intelligence and robotics have been launched by Stanford University and are offered “to students and educators around the world”. The courses are identical to what’s offered to enrolled Stanford students but those courses aren’t eligible to receive Stanford credit.

For more info visit the SEE webpage @ http://see.stanford.edu/

Where is my network?

One month ago, a friend told me if I can configure four new computers (Compacq with M$ Vista) to create a small network for his small business. The work seemed so easy, configure four computers in the same Workgroup is like a child game… or I had been thought since this moment. Bloody hell! four fckng hours and nothing happened. I tried tons of actions, disable Vista firewall, disable anivirus, adding IP addresses directly to the routing tables, but nothing had been happened… Last week, my friend tells me: “I unistalled Norton and all the computers can see others through the network”. Fckng Norton and fckng M$ Vista…

Playing with Arduino

Hace unos días recibí la placa Arduino Diecimilla, y la verdad que me ha impresionada gratamente. Hace ya unos cuantos años empecé a jugar con la mecatrónica. La primera placa que tuve, montaba un chip programable PIC 18F, de Microchip. Y aprendí a utilizarlo en el primer taller de robótica que se realizó en la Campus Party del año 2001. Con esta nueva placa, mucho más sencilla de programar y lo mejor: el framework (compilador, bootloader, herramientas, etc.) y el diseño son opensource, así que no hay que andar instalando parches y versiones de evaluación para poder compilar y cargar el código al chip. Así que aprovecho para inaugurar nueva categoría: Robótica.

no images were found