Lanzamiento de OpenDomo Services

Opendomo Services fue fundada con la intención de eliminar las causas que impiden la propagación de la automatización de viviendas e industrial, con el fin de obtener un precio justo para todos los bolsillos de una forma totalmente abierta, flexible y personalizable. Para lograrlo, los productos OpenDomo Services se basan en la tecnología abierta, el resultado de la colaboración con la comunidad OpenDomo.org, lo que favorece su compatibilidad con muchos de los dispositivos en el mercado y la mejora continuidad de sus productos.

La tecnología basada en la automatización de productos OpenDomo es una manera fácil de poder interactuar con la casa, conseguir comodidad, seguridad y eficiencia a través de cualquier dispositivo con un navegador web o incluso a través de la televisión. También es el único que nació con la vocación de llegar a todo el mundo, convirtiendo su casa en un hogar inteligente capaz de aprender de sus costumbres.

Más información en OpenDomo.com

Posted on 12:29 a. m. by skarvin and filed under | 0 Comments »

Ubuntu 9.04 (Jaunty) en Macbook Pro 5,5

Tras la reciente compra de mi último portátil, un Macbook Pro 5,5, he podido comprobar que Ubuntu 9.04 (Jaunty) no se acopla a la perfección, como si bien hace con muchos otros, con este sistema en particular. Tras varias reinstalaciones, me he hecho un script que recopila todos los pasos necesarios que he ido recogiendo en foros para resolver todos los problemas e incompatibilidades de una sola tajada.


Estos problemas detectados en mi Macbook Pro (5,5) son:

- Activar sonido
- Configurar Tarjeta gráfica
- Activar backlight del teclado
- Remapeo de las teclas de función
- Configuración del touchpad
- Activar el led del bloqueo de mayúsculas

Este es el script, no olvidarse de copiar el fichero el contenido del fichero 11-x11-synaptics.fdi (que se encuentra más abajo) al mismo nivel que este script:

# WARNING: Use at your own risk, only tested on a Macbook pro 5,5 with
# Ubuntu 9.04 (Jaunty)

# Mactel sources
echo "deb http://ppa.launchpad.net/mactel-support/ubuntu jaunty main
deb-src http://ppa.launchpad.net/mactel-support/ubuntu jaunty main" > mactel
sudo mv mactel /etc/apt/sources.list.d/mactel.list
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 7A6BC20C4FE04DADD10837608DB7F87A2B97B7B8
# Update & upgrade
sudo apt-get update
sudo apt-get upgrade

# Download needed packages
sudo apt-get -y install mbp-nvidia-bl-dkms applesmc-dkms hal-applesmc bcm5974-dkms pommed nvidia-bl-dkms sensors-applet nvidia-180-kernel-source nvidia-glx-180

# Load needed modules
sudo echo "
coretemp
applesmc
bcm5974
usbhid
nvidia_bl shift=2
" >> /etc/modules

sudo echo "blacklist usbhid" >> /etc/modprobe.d/blacklist.conf

# Backlight
sudo echo "options hid_apple fnmode=2" > /etc/modprobe.d/hid_apple.conf

# Key remaping
sudo echo -n "options hid pb_fnmode=2" > /etc/modprobe.d/function.conf

sudo update-initramfs -u

# Sound (mind to unmute the Front Speaker channel!)
sudo rm -rf /lib/modules/`uname -r`/kernel/sound
sudo aptitude reinstall linux-headers-`uname -r` linux-image-`uname -r` linux-restricted-modules-`uname -r`
wget ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/snapshot/alsa-driver-unstable-snapshot.tar.gz
tar xf alsa-driver-unstable-snapshot.tar.gz
cd alsa-driver-unstable
sudo ./configure --enable-dynamic-minors --without-oss --with-cards="hda-intel"
sudo make
sudo make install

# Touchpad (copy the
11-x11-synaptics.fdi file at the same level)
sudo cp ./11-x11-synaptics.fdi /etc/hal/fdi/policy/

# To enable Caps Lock led
sudo aptitude remove mouseemu

Contenido de 11-x11-synaptics.fdi:


<?xml version="1.0" encoding="ISO-8859-1"?>

<deviceinfo version="0.2">

  <device>

    <match key="info.capabilities" contains="input.touchpad">

      <match key="info.product" contains="Synaptics TouchPad">

        <merge key="input.x11_driver" type="string">synaptics</merge>

        <!-- Arbitrary options can be passed to the driver using

             the input.x11_options property since xorg-server-1.5. -->

        <!-- EXAMPLE:

        <merge key="input.x11_options.LeftEdge" type="string">120</merge>

        -->

      </match>

      <match key="info.product" contains="AlpsPS/2 ALPS">

        <merge key="input.x11_driver" type="string">synaptics</merge>

      </match>

      <match key="info.product" contains="appletouch">

        <merge key="input.x11_driver" type="string">synaptics</merge>

      </match>

      <match key="info.product" contains="bcm5974">

        <merge key="input.x11_driver" type="string">synaptics</merge>

        <merge key="input.x11_options.LeftEdge" type="string">0</merge>

        <merge key="input.x11_options.RightEdge" type="string">1280</merge>

        <merge key="input.x11_options.TopEdge" type="string">0</merge>

        <merge key="input.x11_options.BottomEdge" type="string">800</merge>

        <merge key="input.x11_options.ClickFinger1" type="string">1</merge>

        <merge key="input.x11_options.ClickFinger2" type="string">3</merge>

        <merge key="input.x11_options.ClickFinger3" type="string">2</merge>

        <merge key="input.x11_options.HorizEdgeScroll" type="string">0</merge>

        <merge key="input.x11_options.VertEdgeScroll" type="string">0</merge>

        <merge key="input.x11_options.VertTwoFingerScroll" type="string">1</merge>

        <merge key="input.x11_options.HorizTwoFingerScroll" type="string">1</merge>

        <merge key="input.x11_options.HorizScrollDelta" type="string">0</merge>

        <merge key="input.x11_options.VertScrollDelta" type="string">40</merge>

        <merge key="input.x11_options.PressureMotionMinZ" type="string">10</merge>

        <merge key="input.x11_options.FingerLow" type="string">16</merge>

        <merge key="input.x11_options.FingerHigh" type="string">80</merge>

        <merge key="input.x11_options.FingerPress" type="string">256</merge>

        <merge key="input.x11_options.PalmDetect" type="string">1</merge>

        <merge key="input.x11_options.PalmMinWidth" type="string">10</merge>

        <merge key="input.x11_options.PalmMinZ" type="string">200</merge>

        <merge key="input.x11_options.MinSpeed" type="string">0.8</merge>

        <merge key="input.x11_options.MaxSpeed" type="string">1.2</merge>

        <merge key="input.x11_options.AccelFactor" type="string">0.10</merge>

        <merge key="input.x11_options.MaxTapMove" type="string">25</merge>

        <merge key="input.x11_options.MaxTapTime" type="string">223</merge>

        <merge key="input.x11_options.MaxDoubleTapTime" type="string">200</merge>

        <merge key="input.x11_options.TapButton1" type="string">1</merge>

        <merge key="input.x11_options.TapButton2" type="string">3</merge>

        <merge key="input.x11_options.TapButton3" type="string">2</merge>

        <merge key="input.x11_options.RTCornerButton" type="string">0</merge>

        <merge key="input.x11_options.RBCornerButton" type="string">0</merge>

        <merge key="input.x11_options.LTCornerButton" type="string">0</merge>

        <merge key="input.x11_options.LBCornerButton" type="string">0</merge>

      </match>

    </match>

  </device>

</deviceinfo>




Posted on 7:43 p. m. by skarvin and filed under | 2 Comments »

Domótica OpenSource = OpenDomo

Desde hace unos meses estamos trabajando en un proyecto totalmente OpenSource cuyo objetivo es el de proporcionar una solución libre de domótica. Desde aquí os quiero animar a que lo probéis y, si tenéis algo de tiempo, colaborar en lo que sea. El sistema se basa en una distro completamente hecha desde 0 la cuál está pensada para correr en sistemas muy pequeños. El software está escrito en C y shell script. Si queréis más información podéis visitar la página del proyecto: www.opendomo.org y en Google Code: http://code.google.com/p/opendomo

Os paso la introducción del proyecto para que os hagáis una idea:

El proyecto OpenDomo se inició en 2006 con el objetivo de crear un sistema de control domótico libre que cubriese las necesidades de un hogar del futuro. Actualmente el proyecto OpenDomo se encuentra todavía en una fase inicial de desarrollo, aunque sus funcionalidades y su estabilidad aumentan cada día.



¿Qué es OpenDomo?

OpenDomo es un sistema de control domótico y seguridad pensado para ofrecer una alternativa libre al hogar del futuro. La licencia bajo la que se está desarrollando el proyecto es la Licencia Pública General (GPL.) . Ésta, garantiza la libertad en el uso del software, uno de los principales valores de la sociedad tecnológica actual. En términos generales, esto implica que OpenDomo puede ser usado, copiado, modificado y distribuido libremente.



Objetivos del proyecto

OpenDomo surge ante la necesidad de disponer de un software avanzado de domótica, que permita un control total del hogar, integrando hardware de fabricantes diferentes. Por lo que el objetivo principal consiste en disponer de un sistema que permita manipular desde un punto central cualquier elemento susceptible de ser controlado electrónicamente. Por ejemplo, todo tipo de sensores, el sistema de alarma, el circuito cerrado de TV, el sistema multimedia (audio, vídeo, TV, ...), las luces, las persianas, el horno, etc.

Una de las formas más extendidas de aplicar la domótica consiste en el uso de hardware especializado. Algunos fabricantes han desarrollado hardware que usa protocolos propios y cerrados, lo que impide la ampliación o mejora de estos productos por terceras partes. Otros, han desarrollado hardware que usa protocolos abiertos ampliamente usados, como KNX/EIB o X10, pero muy limitados.

OpenDomo intenta salir del esquema basado en hardware y protocolos desfasados que no permiten cumplir con las necesidades del hogar actual. De esta manera, se implementa una red domótica basada en TCP/IP y en hardware estándard. TCP/IP es un conjunto de protocolos de amplio uso que forman Internet y que permiten el uso de todo tipo de tecnologías de actualidad, como streaming de audio/video, telefonía IP, compartición de archivos o televisión p2p, etc.
Posted on 2:04 a. m. by skarvin and filed under , | 2 Comments »

MySql :: Tips de Optimización

Hola,

Estas son unas recomendaciones básicas para mejorar el rendimiento de MySQL y que se hacen vitales cuando tratamos con grandes cantidades de información:

1) Evitar utilizar el tipo de dato BIGINT y utilizar en su lugar INT. Para conocer el tipo de dato recomendado por MySql podemos utilizar la siguiente consulta:

SELECT id_comercio FROM bbdd.comercios PROCEDURE ANALYSE()\G

La cual nos devuelve el tipo de dato óptimo en el campo "Optimal_fieldtype".

2) Es importante evitar que los tipos de dato numéricos se traten como "Strings" en las sentencias.
Por ejemplo:

- Incorrecto: SELECT COUNT(*) FROM bbdd.pedidos WHERE id_pedido='10';

- Correcto: SELECT COUNT(*) FROM bbdd.pedidos WHERE id_pedido = 10;

- Incorrecto: INSERT INTO tabla_x VALUES ('94','1','99');

- Correcto: INSERT INTO tabla_x VALUES (94, 1, 99);

Puede parecer bastante insignificante pero cuando hablamos de millares de consultas o más, estamos obligando al servidor MySql a hacer un CAST de String a Entero por consulta lo cual, nos lo podemos ahorrar.

3) NO crear índices si el valor que vamos a guardar tiene menos de 20 posibles variantes.
Ejemplos:

- NO crear índices en campos del tipo 0/1 o boleanos.
- NO crear índices en campos cuyo calor sea un rango de números del 1 al 10.

4) Es muy aconsejable utilizar la sentencia EXPLAIN en todas las consultas para saber si estamos utilizando correctamente los índices o en caso contrario, el servidor está haciendo un "table scan". Es importante saber que aunque especifiquemos índices en la cláusula WHERE, MySql no tiene por qué utilizarlos si no lo ve conveniente.

5) No utilizar funciones de tipo NOW o CURDATE ya que las consultas que las utilizan NO las guardan en CACHE.

6) Si se realizan cargas de datos en tablas, es mejor utilizar Inserts múltiples: INSERT INTO bbdd.tabla (campo1,campo2) VALUES (1,2),(3,2),(3,6).

Ejemplo en PHP:

...
$sQuery = "SELECT campo1, campo2 FROM tabla";
$iIdQuery = mysql_query($sQuery, $iIdConn);

foreach(mysql_fetch_row($iIdQuery) as $aValue)
{
$aValues[] = "(".$aValue['campo1'].",".$aValue['campo2'].")";
}
$sQueryInsert = "INSERT INTO tabla2 (campo1, campo2) VALUES ". implode(",",$aValues);

mysql_query($sQueryInsert,$iIdConn);
...

Espero que os sean de utilidad. En cuanto recopile otra lista volveré a postearlos.
Posted on 12:58 a. m. by skarvin and filed under , , | 0 Comments »

Python :: Subir Ficheros a FTP

Hola,

Después de tantos meses, publico un pequeño script que me es muy útil: Sube automáticamente los ficheros modificados al FTP que le especifiquéis. Que conste que soy un novato en Python! Ahí va:

--------------------------------------------------------
#!/usr/bin/env python
# coding: iso-8859-15

import os
import sys
import ftplib

# Configuración

project_path = "/path/to/project"
ftp_project_path = "/public_html"
ftpsite = "ftp.site.com"
ftpusr = "ftpuser"
ftppass = "ftppassword"
mnmin = 120
file_types = "[php|htm|html|js]"

# Funciones

def upload(conn, fname):
global ftp_project_path, project_path, path_len

dir_len = len(fname)
file2stor = fname[path_len:]
(dir, tail) = os.path.split(file2stor)
dir2stor = ftp_project_path+dir
command = "STOR " + tail

conn.cwd(dir2stor)
print "Almacenando en: "+dir2stor

fd = open(fname, 'rb')
temp = fd.read(2048)
fd.seek(0, 0)
if temp.find('\0') != -1:
conn.storbinary(command, fd)
else:
conn.storlines(command, fd)
fd.close()

def connect(site,usr,pwd):
conn = ftplib.FTP(site)
conn.login(user=usr, passwd=pwd)
return conn

# Inicio del script

conn = connect(ftpsite,ftpusr,ftppass)
path_len = len(project_path)

for file in os.popen("/usr/bin/find "+project_path+" -type f -regex '.*."+file_types+"' -mmin -"+str(mnmin)).readlines():
file = file.strip()
print "Subiendo online el fichero ["+file+"]"
upload(conn,file)

--------------------------------------------------------

Espero que os sea útil. Básicamente sube al directorio del FTP que le especifiquéis los ficheros modificados con la extensión file_types en las últimas 2 horas.

A10!

PD: Tener en cuenta que python utiliza la identación para englobar las funciones, bucles, condicionales, etc... y que el blogger este se come las tabulaciones!
Posted on 12:15 a. m. by skarvin and filed under , , , , | 1 Comments »

Anillo de confianza SSH

Si estáis hartos de introducir la contraseña cada vez que accedéis a un servidor mediante ssh,
podéis evitarlo siguiendo estos sencillos pasos para crear un anillo de confianza en ssh.

1 - Generar la clave pública, que identificará a nuestro equipo y usuario. Esto se hace mediante el siguiente comando:

skarvin@skarvin-desktop:~>ssh-keygen -t rsa

*No hace falta responder a las preguntas.

2 - Importar la clave en el equipo donde queramos conectarnos.

skarvin@skarvin-desktop:~>scp .ssh/id_rsa.pub skarvin@server:.

3 - Añadir la clave en el fichero authorized_keys
Si no existe, crearemos el fichero .ssh/authorized_keys en vuestra home mediante:

skarvin@server:~>touch .ssh/authorized_keys

y a continuación añadiremos al fichero nuestra clave pública creada anteriormente:

skarvin@server:~>cat id_rsa.pub > .ssh/authorized_keys

Eso es todo!
Posted on 3:57 p. m. by skarvin and filed under , , , , | 0 Comments »

Windows Vista & Samba

Para poder autenticar un cliente Windows Vista contra un servidor Samba necesitamos cambiar la configuración del cliente Vista que por defecto, no nos deja acceder a recursos compartidos por un servidor Unix/Samba. Los pasos son los siguientes:

Ir a:
Inicio -> Ejecutar -> secpol.msc

Nos aparecerá la siguiente pantalla:




A continuación seleccionaremos: Network Security: LAN Manager authentication level y cambiaremos el valor por defecto: Send NTLMv2 response only por Send LM & NTLM - use NTLMv2 session security if negotiated.




Samba no implementa NTLMv2 por lo tanto deberemos usarlo solo si se produce la negociación.
Posted on 8:42 p. m. by skarvin and filed under | 10 Comments »