Archivos Mensuales: abril 2007

y Al final claudicó!

Bueno, a la final y despues de mucho trajin y sufrimiento, mi portatil decidió claudicar; ya venía mostrando sintomas de mis malos tratos y formas toscas de tratarla; durante el CNSL Falcón terminó por dañarse la bisagra que faltaba y ahora la pantalla flota libremente por todas partes…
Lugar del daño:

Los daños recibidos:

Espero en cuestión de un par de días el soporte técnico ACER (TecnoAsist de Venezuela) me informe si tienen la pieza de repuesto en existencia y viajar a Caracas antes del viernes para adquirir dicha pieza.

Pobre, ella nunca se esperó recibir tan malos tratos … espero que la reparación le dé una segunda oportunidad …

… sobre PlanetaLinux (y final)

Este post inicialmente iba a ser un comentario, pero se hizo tan largo que mejor hago un post público.
Mi pregunta prima y única es la siguiente; si todos fueron removidos (sus feed suspendidos), por qué siguieron apareciendo posts hasta el día de hoy?, si todos fueron removidos, por qué en la lista de gente solo faltaba yo?; son cosas de pensarlo no?.
Sobre suspensión de feeds
Yo recibí un correo (debo decir que fuiste tu, no?) que entre otras cosas decía "… ¿Podrías crear una categoría, quizás llamada Planeta Linux, donde asignes tus posts relacionados con estos temas? … Una vez que la tengas y le hayas asignado algunos de tus posts viejos, puedo reactivar tu feed en PL Venezuela con esa categoría …"; de este mensaje aduje que mi feed estaba suspendido y procedí a visitar planetalinux para ver quien más estaba suspendido.

Repito lo que puse en el post anterior "Por ende, al ver que el post de Richzendy sigue ahí y al ver que en lo absoluto NADIE de la lista de Planeta Linux capítulo Venezuela ha sido retirado (hasta wattica sigue ahi, no tengo nada contra Roxana, pero cuando ella ha escrito algo sobre Linux?) excepto yo, me pregunto, por qué me han retirado de la lista de Planeta Linux Venezuela?"; quien además de mi persona quedó fuera de la lista de "gente" de planetalinux esa semana?, fue evidentemente mi única pregunta.

Conclusión de la disputa:
No soy (ni uso) Mandrake para saber que fui "suspendido" porque "El último caso es particular. Jesús Lara hizo varios posts no relacionados con Linux en su blog. Particularmente hubo gente que reclamó que habían recien escrito algo relacionado con Linux y los posts de Jesús “empujaron” los posts relacionados con Linux hacia el final del Planeta (nda: esto no me fue explicado en el correo inicial, ves?). Por lo tanto suspendi la suscripción de Jesús y lo contacté el 9 de Abril. (posteado por José Parella el 19 de abril)"; esto explica entonces por qué fuí suspendido, al menos esa única razón me hubiera bastado; razón que nunca recibí.
Yo siempre posteo 3 ó más articulos por semana, en variados temas, mis disculpas a todos aquellos que ven sus posts empujados hacia el final de planetalinux por mis posts.

No es atacar a las personas
Nunca dudo en lo absoluto de la capacidad de la gente, su voluntariado ni nada de eso; al contrario, cuando me llegó el correo inicialmente, diligentemente respondí a la solicitud de crear una categoría llamada "planetalinux"; mis posts fueron migrados a esa categoría en menos de 10 minutos, busca en tu buzón un correo de la misma fecha (9 de abril) que rezaba entre sus frases algo como:
"Bueno, por lo general lo que tiene que ver con programacion va en la categoria programacion y en Linux lo que tiene que ver con linux en general, pero interesante tu idea, crearé la categoria para agrupar estos términos …";
tomese nota que dicha categoría está en mi blog desde ese mismo momento.
Segundo aviso:
y despues envié otro correo que rezaba: "Como Planeta Linux solo muestra tus ultimos sindicalizados, evidente no tengo que cambiar mis 200 posts actuales, simplemente con que cada nuevo post aparezca en la nueva categoria planeta linux es más que suficiente; la nueva categoría está lista … revisa cuando puedas …" (o sea, que cuando dices en tu post "ni Jesús me lo informó, realmente", no veo como no te lo informé, si tengo confirmación de recepción y todo de ese correo).
Nota sobre contacto:
Por cierto, si estás suspendido, no puedes escribir a planetalinux@damog.net:
Post by non-member to a members-only list
Por ende; era evidente que a la única persona que podía enviar el correo sobre mi suspensión (que por lo que veo en tu post, no leíste o no recibiste) era a tu persona; en segunda instancia le escribí a damog; sin embargo, no sé si recibió o no el correo. A Milton no puedo escribirle porque no tengo su correo y tampoco aparece en la lista de contactos

finalizamos día 9:
O sea, muchisimo antes de crear ese post habia hecho y respondido todo lo que se me solicitó; la razón de este post?; bueno, mi desaparición de la lista de gente (mi feed fue desactivado, pero el resto no) y que casualmente Alberto Capella y Richzendy Contreras tenian contenidos "off-topic" ese mismo día y ellos no fueron removidos (aun están ahi, por cierto, nunca vi sus feeds suspendidos como indicas en tus comentarios); si hubiera "recibido" la razón real de mi suspensión el mismo día 9, este post nunca hubiera surgido, realmente.
Y si le escribí a damog, y al igual que el correo que te envié el 9 de abril, no he recibido respuesta; he de ahí mi segunda molestia (o sea, que hubo previo aviso de mi parte).
(puedo reenviar el correo si deseas).
Razones personales?
Con respecto al comentario de Cesar, no soy quien para filtrar su comentario, ni tampoco el de Walter, todos tienen la libertad de expresarse en mi blog; si él tiene alguna causa personal contra tí no es mi problema, yo de mi parte no tengo en lo absoluto ninguna adversión hacia tu persona (acepta mis disculpas si esta situación lo tomaste por el lado personal, si tu nombre aparece en el post, es cuando indico que fuiste tú quien me comunicó las intenciones de limpiar a planetalinux (y en verdad lo merecía) y cuando indico que planteaste una re-organización de planetalinux, asi que no veo donde diga "esto fue culpa de José Parella" (pudo ser Damog no?) por lo que si fue tomado personalmente, nuevamente mis disculpas).
Ese post fué por qué mi suspensión la tomé como un sintoma de la "limpieza de planetalinux" y no porque hubiera personas que se quejaron de mi "post spamming"; con esto quiero decir que me molestó bastante que un post tan poco ético como el de richzendy estuviera apareciendo por días (desapareció gracias a que etch fue liberado y hubo muchos posts al respecto); entiendo que entonces las ocupaciones de los administradores de planetalinux pueden ir en contra de una posible "rápida solución a la limpieza"; pero si de limpieza se trataba, pudieron empezar por feeds con contenido fuera de los mismos lineamientos de planetalinux; lo cual no fué así.
(de hecho, considero que en mis últimos 20 posts, solo 3 (teorema del salario de dilbert, emma shapplin y sobre mercenarios 2) quedan fuera de los lineamientos de planetalinux).

Conclusiones:
Por ende, hubiera agradecido al menos:
1.- explicación por la cual el feed de Richzendy Contreras nunca fue suspendido (siguió apareciendo por más de una semana).
2.- un correo que dijera: "recibí tu correo, pero estoy ocupado y no haré los commits hasta dentro de 10 días"
3.- La explicación "real" de mi suspensión (y muy agradecido por darme esa explicación, pero a través de un post el día de hoy).

Y eso hubiera bastado, entiendo completamente la situación de "no dedidación exclusiva" de los administradores de planetalinux (además de tus múltiples ocupaciones en debian.ve y otras comunidades), así que tampoco estaba discutiendo si se restituye en 2 días ó en 3 meses; si los cambios son para mejorar, bienvenido sean.

Por ende, cuando lo tomo como una situación "personal", no es en lo absoluto que sienta que me odian o que no tenga "el cariño sufiente" como tú dices (ni como afirmas en: "Por ejemplo insinuar que yo “saqué” a Jesús Lara porque lo “odio” o que “dejé” a Richzendy porque lo “quiero” es bastante ridículo"; si me sacaste, lo tomé por el lado de la corrección, sino sacaste a Richzendy mientras sacabas al resto, eso daba que hablar; no?, comprende que sin una "explicación" a estas cosas, las <broma>teorías conspirativas</broma> surgen …
De mi parte, no creo que sea yo la persona que haya hablao de amores u odios; quien hizo esas insinuaciones, pongamoslo claro, no fuí yo.

Por ende, pido disculpas públicas; primero porque nunca fue mi intención que el post fuera asumido como algo "personal" por alguno de los moderadores de planetalinux (nunca ataqué en primera persona a nadie, al menos no creo haberlo hecho y si lo hice, entonces mis disculpas también por eso); es decir a todos, sin excepción; y en segunda instancia, por considerar que nunca fueron mis comentarios un llamado de reflexión acerca de como realizar ciertas cosas tan delicadas como una suspensión de un usuario sin existir motivos para ello (o sin notificarle las razones), entre otras cosas.

Nota: espero no me vuelvan a suspender por un post tan largo … 😛 (bueno, no creo que sindicalice este post para planetalinux, el que desee leerlo que venga aquí).

Hayden es muy inteligente para nosotros …

Hayden Panettiere (La porrista de "Heroes"), ha iniciado una campaña de concientización sobre el mal uso de las herramientas de comunicación en internet (como los IM y chats) por parte de "cyberpredators", acosadores de niños y pedófilos, la campaña (que incluye un anillo con la frase 2smrt4u (too smart for you ó muy inteligente para tí) muy al estilo de la bandita livestrong) busca crear conciencia entre los jovenes sobre los peligros del Internet.

Aquí un vínculo al poster: http://www.2smrt4u.com/ad_march.html

y el vinculo a la página principal de 2smrt4u.

Nota:Como cosa rara en este mundo del internet, alguien ya compró 2SMART4U (solo varía a A); ahora aparece un "under construction" pero mañana capaz alguien le saca una página de mamadera de gallo como a google
http://www.gooogie.co.uk/

Eso me recuerda tambien el caso famoso de las bandas de gel Livestrong, se convirtieron en un artículo "fashion" donde todo el mundo quería una para estar "in"; llegandose a subastar por altas sumas en eBay; sin embargo, la bandita nació inicialmente como un articulo de caridad (vendida a un dolar cada una, aqui en Venezuela llegué a verlas en 50 mil Bs. (algo más de 25 US$ C/U)) y Lance Armstrong (el ciclista creador de la idea de la bandita) se sintió muy enojado y ofendido cuando esta gran cantidad de fondos de eBay y otras casas de subasta (y las ventas astronómicas en muchos países), nunca llegaron a ninguna fundación de lucha por el cancer ni nada parecido.
Porque como dicen las ULTRAFABULOSAS,  ahorrar no es chic, hay que derrochar!, la caridad no forma parte de lo fashion …

Esperemos que no le pase lo mismo al anillo …

Object Relational Mapping en PHP5 (capitulo 1)

Introducción:

Hace algún tiempo andaba persiguiendo la idea, el concepto de ORM (Object Relational Mapping) implica trasladar la lógica relacional de una tabla:
TABLA -> CAMPOS -> Registros
a un lógica de objetos, donde cada tabla sea representada por una clase, cada campo (atributo) sea representado por una propiedad de dicha clase y cada método represente una operación posible a realizar sobre dichos datos.
El concepto de capa de datos está tan estrechamente relacionado al concepto de Base de datos, que realmente indicar que se puede programar con nulo SQL es obviar la potencia de SQL (y restringir en muchas formas a la capa de datos); de hecho, le leído por ahi que grandes aplicaciones hechas con este concepto de abstracción, han cambiado a usar nuevamente SQL en su capa de datos y es que de hecho, RoR será todo lo que quieran, pero principalmente es … lento …
volviendo al tema de ORM, la lógica de objetos implicada en el acceso a los datos deviene de perl::dbi (aunque los de ruby digan que su invento el activerecord es genialidad propia) y consiste en:
una clase por tabla
class inscritos :
cada atributo (propiedad) representa un campo de la DB:
inscritos.nombre, inscritos.apellido, inscritos.cedula

y cada método, una operación realizable a la DB:

inscritos = new activerecord ('inscritos');

inscritos->nombre = 'Jesus'

inscritos->apellido = 'Lara'

inscritos->cedula = '13264658'

inscritos->fecha_inscrito = date()

inscritos->save() //método que me permite guardar el registro en la DB.

Como se ve, inscritos es un OBJETO y dentro de él contenemos el “mapa fisico” (lo que en teoría se conoce como la metadata de la tabla) de la tabla, con sus relaciones, indices primarios, tipos de datos, etc.

Hasta el momento existian 2 posibilidades conocidas (y un sinfin de desconocidos, aqui va otra más) para operar ORM en PHP, una de ellas PROPEL, este permitía tener un mapa completo de la tabla, pero debia ser “creado” usando un estilo “alternativo” de XML llamado YAML; si la tabla cambiaba de forma, habia que destruir el YAML y hacer uno nuevo, uno por cada tabla (no muy práctico tomando en cuenta que RoR hace este mapeo “on fly”).
el otro, CREOLE, es más una capa de abstracción que un ORM en sí …
CakePHP agrega su aproximación a un ActiveRecord con todas las limitaciones que un código PHP4 puede tener, entre ellos que te exige una forma “particular” de tener la tabla (como por ejemplo, un id en cada tabla para que pueda “identificar” quien es el PK (primary key) de la tabla); esto tiene algunas consecuencias, una tabla como esta:

CREATE TABLE  `ejemplos_ajax`.`dpt_parroquias` (

`id_entidad` int(8) unsigned NOT NULL,

`id_municipio` int(8) unsigned NOT NULL,

`id_parroquia` int(8) unsigned NOT NULL,

`parroquia` varchar(75) DEFAULT NULL,

`codigoe` char(3) NOT NULL,

`capital` varchar(128) DEFAULT NULL,

PRIMARY KEY (`id_entidad`,`id_municipio`,`id_parroquia`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

Con un indice PK compuesto de 3 campos no es entendible por CakePHP (y en sistemas complejos son muchas más las tablas “extrañas” que las básicas tablas de blog id, nombre, apellido …).

Decidi hacer esta saga de “Haga su ORM en PHP5 en algunos pasos” … (y despues comase una pizza) …

Una idea inicial de “que debe hacer el ORM”:

Lo que perseguimos es llegar a un código (yo ya llegué, jijiji, lo iré publicando en seguidilla en esta serie de posts) que sea PHP5-only y con la potencia suficiente para realizar cosas como:

//cargar un activerecord de la tabla dpt_entidades

$orm = $db->activerecord('dpt_entidades');//decirle que se traiga TODOS los datos

$result = $orm->find_all();

//e iterar sobre ellos elegantemente en una consulta objeto $result->campo y no via array $result[array]

//usando do while

do {

echo $result->cod_entidad . ' ' . $result->entidad . ' ' . $result->capital . '<br/>';

} while($result->next());

//o usando foreach

foreach ($result as $value) {

echo $value->cod_entidad . ' ' . $value->entidad . ' ' . $value->capital . '<br/>';

}

Tambien crear filtros y sentencias más complejas:

//condicion between

$orm->cod_entidad->between('FAL', 'MON');

//ordenar:limit and offset (method chaining):

$orm->order_by('cod_entidad')->limit(10)->offset(0);

//donde el campo mostrar sea igual a uno

$orm->mostrar->where(1);

//y el campo entidad sea igual a Monagas O igual a Lara o distinto de Nulo

esto de aqui abajo, se conoce como "method chaining" y consiste en encadenar uno tras otro los métodos comunes, es una de las posibilidades de PHP5

$orm->entidad->where('Monagas')->where('Lara', true)->where(null, true);

//y por favor ordenalo por entidad

$orm->entidad->sort();

tambien puedes hacer LIKE

$orm->entidad->like('L')->like('M', 1,true);

o estructuras como IN, EXISTS y otras de las condiciones WHERE en SQL

$cod_entidad = array('DCA', 'MON', 'LAR', 'ZUL');

$orm->cod_entidad->in($cod_entidad)->in('SELECT cod_entidad FROM dpt_ciudades', true, true);//pido un ORM de la tabla dpt_ciudades

$ciudades = $db->activerecord('dpt_ciudades');

//indico que campos deseo en la consulta

$ciudades->select('id_entidad, count(*) as cantidad');

//y agrupo por el campo id_entidad

$ciudades->id_entidad->groupby();

//ademas, creo una condicion group (having)

$ciudades->having('count(*)', '>30'); //solo aquellas entidades con más de 30 ciudades

Tambien podemos ver algo mas complejo como:

$ciudades->select('DISTINCT e.entidad,  e.id_entidad, ciudad');

$ciudades->id_entidad->join('dpt_entidades e', 'e.id_entidad', 'LEFT');

$ciudades->limit(150);

$ciudades->id_entidad->between(6, 8);

/* esto causa una sentencia como:

SELECT DISTINCT e.entidad, e.id_entidad, ciudad FROM dpt_ciudades LEFT JOIN dpt_entidades e ON (dpt_ciudades.id_entidad=e.id_entidad) WHERE dpt_ciudades.id_entidad BETWEEN '6' AND '8' LIMIT 150

*/

Tambien se pueden operar los datos:

$entidad = $orm->create();

$entidad->cod_entidad = 'PDF';

$entidad->entidad = 'Principado del Distrito Federal';

$entidad->capital = 'Elbonia';

$entidad->save(); //al ser un nuevo registro, se inserta en la base de datos

echo "la ultima entidad guardada fue {$entidad->last_id}";

Donde se ha visto?

CodeIgniter (un framework para PHP4/5) tiene un conjunto de funciones que se aproximan a la comodidad de crear sentencias complejas como SQL de arriba pero usando solo métodos de objeto (de hecho, codeIgniter es donde he sacado muchas de las ideas), el único inconveniente de CodeIgniter es que usa a PROPEL, por ende, hay que crear los mapas de las tablas a mano usando YAML.
Sin embargo, todas las extensiones de conexión a datos de PHP5 soportan entregar metadata con las consultas, y al estilo RoR es simplemente hacer algo (internamente) como:
$result = $this->_db->query(“SHOW COLUMNS FROM {$tabla}”);
y ese SHOW COLUMNS devolvera toda la metadata necesaria para recrear la estructura de la DB dentro de un objeto.
simple no?

Dormir y Despertar:

No tanto, leer y parsear la DDLde cada tabla es un proceso lento (aunque en PHP5 no es tan severamente lento como RoR); sin embargo, aqui otra característica de PHP5 corre en nuestro auxilio, existe la posibilidad de “serializar” un objeto PHP5 en forma de una cadena binaria y guardarla en disco o en un DB, haciendo caché de la metadata y salvando milisegundos preciosos para nuestra aplicación.
Nota: para serializar un objeto se procede de la siguiente manera:
$inscritos = $db->activerecord(‘inscritos’);
$cache = serialize($inscritos);

y se procede a guardarlo en una DB o en un archivo en disco, algo como:
file_put_contents(‘cache_inscritos.tmp’, $cache);

para restaurarlo se hace:
$cache = file_get_contents(‘cache_inscritos.tmp’);
y luego se le “restaura” a la forma objeto:
$inscritos = unserialize($cache);

Y como se restaura automáticamente la conexión?, es decir, los recursos (conexiones a DB, sockets, etc) son cosas inserializables, entonces PHP5 pone a nuestra disposición los métodos mágicos __sleep y __wakeup

public function __sleep() {
$this->connection->close();
}
__sleep se ejecuta previo a la serializacion de un objeto, te permite limpiar variables temporales para no ocupar espacio, cerrar conexiones a la DB, etc

luego
public function __wakeup() {
$this->connection->connect();
}

el metodo __wakeup se ejecuta cuando un objeto es “despertado” de una serialización, en este caso, podemos volver a conectarnos a la DB, revisar si todo está correcto, etc.

Y en la proxima …

En la próxima entrega explicaré como lograr iterar usando foreach sobre un objeto complejo y sobre como lograr acceder a los campos usando notación de objeto ($inscritos->nombre, $inscritos->cedula, etc).

Celebrando estadísticas

Bueno, tampoco es que recibo muchas visitas; eso si, Google me tiene algo de cariño …

Total hits: 30598
Unique hits ever: 15625
Hits in last 24 hours: 409
Unique hits in last 24 hours: 195

Estas son mis estadísticas desde el 30 de noviembre del 2006 (que empecé a usar FireStats) para contar visitas y únicas visitas; por ende estoy celebrando las 30000 visitas y las 15 mil visitas únicas ambas en 5 meses.

Que bueno saber que hay gente que te lee…

Sobre una caída del SENIAT

Paso 1: Te acercas al SENIAT, descubres que tienen un letrero que dice "No hay línea en la página web del SENIAT"

Paso 2: Como te toca ese día, sino, la próxima semana, que haces?
    1.- Te echas a llorar
    2.- Corres toda tu agenda para hacer un miércoles para volver otra vez
    3.- Agarras a un funcionario de turno y le explicas que no es tu culpa que esa troja de página esté caída

Me anoto por la opción 3;  insisto que esa cosa de que la horrible página esté caída y que no es mi culpa ; además que iré al día siguiente, sino me atienden les quemo el local.

Por pura curiosidad llego a mi casa y reviso el portal del SENIAT; de manera interesante este está activo, no sirve para un toche pero está activo … ¿se reactivó mientras estaba camino a mi casa?.

decido ejercer el paso 3: volver al SENIAT pero esta vez con portátil en mano (por si acaso), e indicarle al funcionario que la página si está activa y que deberían atenderme, que opciones le quedan al funcionario?
    1.- Atenderme a regañadientes
    2.- Atenderme gustosamente
    3.- Decirme que el problema no es el portal en si sino su "sistema Intranet" y que igualito hoy no trabajan, que pase mañana …
Esto no es jugar Clue; ya sabemos la respuesta del funcionario de turno …

Paso 4: compro en la plaza Bolívar una estampita de Vielma Mora con un crucifijo y unos velones … a ver si lo religioso y metafísico me ayudan en algo …

Vielma Mora, gracias por los favores concedidos …

Una situación “off-topic” acerca de planeta linux

Hoy en recibido un correo de José Parella (blog.bureado.com.ve); como uno de los encargados de la administración de planeta Linux, para que creara una categoría más "on-topic" donde agrupar mis artículos sobre Linux y cultura libre en general, y de plano así lo he hecho; quisiera indicar que esta iniciativa de mantener en su temática a la sindicalización de planeta linux venezuela (y en general, cualquiera) es acorde y justamente lo que necesitaba planeta linux para evitar post como los de "estar de malas" de Richzendy Contreras; sin embargo, tengo un par de observaciones al respecto:

He evitado en lo posible postear temas que no vinieran al caso acerca de la cultura geek en sus variadas expresiones y de hecho, así ya estaba categorizado mi blog, como se puede demostrar en mis constantes intentos de blog

Mis articulos off-topic muchas veces me los reservo para algunos amigos y los envío por correo (salvo el de la monja Chix0r que lo publiqué por solicitud de varios amigos) y por lo general me parecen mucho la temática de lectura geek habitual (como leer barrapunto pero más jocoso).

Por ende, al ver que el post de Richzendy sigue ahí y al ver que en lo absoluto NADIE de la lista de Planeta Linux capítulo Venezuela ha sido retirado (hasta wattica sigue ahi, no tengo nada contra Roxana, pero cuando ella ha escrito algo sobre Linux?) excepto yo, me pregunto, por qué me han retirado de la lista de Planeta Linux Venezuela?, recuerdo que oficialmente ni siquiera me preguntaron para sindicalizar mi blog, ni me pidieron hackergochi ni nada, simplemente mis post aparecieron ahi (tal vez alguien me postuló) y bueno, yo felíz de contribuir de una u otra forma; pero ahora se me retira de la lista de feeds y otras personas con posts menos "adecuados" al "ON-TOPIC" de Planeta Linux Venezuela, aun siguen en lista y posteando …

Solo quería informar, que si las cosas se van a hacer con burocracia en en la más estricta de las formas de organización (muy a lo debian pues); entonces no solamente yo debería ser retirado de las listas de sindicalización de Planeta Linux.

Aun cuando inicialmente hice caso a las observaciones sobre "reorganización" de mis posts para cumplir con lo solicitado por José Parella, es evidente que como "Ley" no se está cumpliendo de manera democrática y cabalmente.

Queda al libre albedrío de los Organizadores de Planeta Linux Venezuela sindicalizar o no el contenido de mi blog; de mi parte, no haré ninguna solicitud formal de inclusión, que quede claro que mi remoción de la lista me ha ofendido bastante; no porque me hayan retirado, sino porque bloggers con contenido menos "adecuado" siguen posteando y on-line, por ende, siento esta situación como algún tipo de agresión personal.

Es todo lo que deseo comentar al respecto …

Instalar Audio Bluetooth Alsa

hace algun tiempo me dediqué a instalar el Audio Bluetooth Alsa Project, sin embargo, hasta hoy se me ocurre postear la solución:

Bluetooth-alsa Project

#descargar:
    cvs -d:pserver:anonymous@bluetooth-alsa.cvs.sourceforge.net:/cvsroot/bluetooth-alsa login
    cvs -d:pserver:anonymous@bluetooth-alsa.cvs.sourceforge.net:/cvsroot/bluetooth-alsa co btsco

# Compilar:

    ./bootstrap
    ./configure
    make
    make install
    make maintainer-clean

# Para poder lograr SCO (Audio dos vias) se necesita instalar el emu10k1 driver (Este driver fuerza la implementación de la directiva  "snd_hwdep_new").

#construir el kernel module:
    cd kernel
    make
    make install
    depmod -e
    make clean

#usando SCO audio

  1. Insertar el módulo (o mejor, configurar al ALSA para que lo cargue)
>modprobe snd_bt_sco

   2. Si acaso estuviera cargado el servicio de sonido esound, hay que detenerlo
>esdctl stop

   3. ejecutar:
 >hciconfig hci0 voice 0x0060

    nota: esto activa el canal de audio de nuestro dispositivo bluetooth, si deseamos saber si está el dispositivo bluetooth activo, entonces:
>hcitool dev

   4. Si tienes un headset bluetooth o esos microfonos inalambricos del celular (como el que tuve alguna vez y un hampón en el boulevard de Sabana Grande me arrebató de la oreja, pero eso es otra historia); enciendanlo, y hagan pair (conexión) con su computador:
>hcitool scan
Obtienen el btaddress (que es como una mac address del dispositivo bluetooth) y luego
>hcitool cc <btaddress>
 
   5. Hay que levantar el manejador de audio bluetooth alsa:
>btsco <bdaddress> <channel>
Si no conocen en que canal deben reproducir apropiadamente deben ejecutar:
>sdptool search –bdaddr <btaddress> 0x1108

6. Probablemente se ha de colocar el passkey (clave de 4 digitos de todos los dispositivos bluetooth) si es la primera vez que conectan el headset al computador, si acaso no lo saben, les digo como truco que para los nokia siempre es 0000 (4 ceros).

7. Traten de enviar o recibir audio por el headset (configuren el origen y salida de sonido a /dev/dsp1); tambien pueden probar la posibilidad de reproducción del alsa device con el siguiente comando:
>aplay -B 1000000 -D plughw:Headset cancion.mp3

8.- si desean grabar algo emitido desde el bluetooth headset entonces:
>arecord -D plughw:Headset mivoz.wav

Humor y leyes

Rememorando viejos articulos (este es del año 2001) sobre Murphy y otros que hacen nuestra vida meramente imposible, aqui continúo la saga:

LEY DE LA CONTINUIDAD INFORMATICA: Si funciona bien, no lo toques.

LEY DE LA MUJER DE TUS SUEÑOS: siempre llega un mes después de casarte.

LEY DEL BAÑO: Las ganas de ir al baño son inversamente proporcionales al cuadrado de la distancia entre tú y un baño.

LEY DE LAS MANCHAS: Hay 2 tipos de mancas, el manchas oscuras que manchan los muebles claros, y manchas claras que manchan los muebles oscuros.

LEY SAGRADA DE LOS TORNILLOS: No importa cuántos tornillos tengas, seguro que el que necesitas en este momento no está en ese montón, o no es del largo justo o del grosor adecuado.
ANEXO DE WALTER: No importa cuanto te preprares para una instalación, siempre te faltará el cable, el equipo o el CD más importante.

CITA EQUIVOCADA DE GROSSMAN SOBRE H.L.MENCKEN: Los problemas complejos tienen soluciones erróneas sencillas y fáciles de comprender.

LEY DE FLUGG: Cuando se necesita tocar madera es cuando nos damos cuenta de que el mundo está compuesto de aluminio y vinilo.

LEY DE PATTISON SOBRE LA ELECTRONICA: Si los cables se pueden conectar de dos formas, la primera es siempre la que daña el equipo.

LEY DE FARRELL SOBRE COMPONENTES SOFISTICADOS: El componente más caro es siempre el que se rompe antes.

LEY DE LEWIS SOBRE LA ADQUISION DE EQUIPOS : No importa cuánto tiempo hayas estado buscando o planificando comprar una cosa. En cuanto la hayas comprado la rebajarán.

LEYES SOBRE JARDINERIA: 1.-Las herramientas ajenas sólo funcionan en jardines ajenos. 2.-Las herramientas sofisticadas no funcionan. 3.-Si nadie lo usa, por algo será. 4.-Conseguirás el máximo rendimiento de lo que menos necesites.

LEY DE McLAUGHRY DEL ESTACIONAMIENTO: Cuando vayas caminando habrá montones de huecos para dejar el vehiculo. Cuando vayas en tu vehiculo, no habrá ni uno.

FENOMENOS TELEFONICOS DE FRANK 1.- Si tienes lápiz no tienes papel. 2.- Si tienes papel no tienes lápiz. 3.- Si tienes las dos cosas nadie te deja un mensaje.

LEY DE WOLTER: Si tienes tiempo, no tendrás dinero. Si tienes dinero, no tendrás tiempo.
ANEXO DE WOLTER: Cuando tengas el tiempo y el dinero, ya no querrás hacerlo.

REGLA DE FAHNSTOCK SOBRE EL FRACASO: Si no atina a la primera, destruya todas las evidencias de que lo ha intentado.

EXTENSION DE GATTUSO DE LA LEY DE MURPHY: Nada es tan malo nunca como para que no pueda empeorar.

LEY DE PUDDER: Todo lo que empieza bien, acaba mal. Todo lo que empieza mal, acaba de puta pena.

TEOREMA DE STOCKMAYER SOBRE EL TRABAJO: Si parece fácil, es difícil. Si parece difícil, es asquerosamente imposible.

LEY DE LO IMPRONUNCIABLE: En cuanto mencionas algo, si es bueno desaparece y si es malo, sucede.

LEY DE MURPHY SOBRE LA BUROCRACIA: Si algo puede ir mal, lo hará por triplicado.

COROLARIO SOBRE LA MADRE NATURALEZA: La Naturaleza siempre está de parte de la imperfección oculta, porque la Naturaleza es madre de todos los males; por ende, la madre naturaleza es una puta!.

Teorema del Salario de Dilbert

El "Teorema del salario" de Dilbert establece que "los ingenieros y científicos nunca pueden ganar tanto como los ejecutivos y los comerciales".

Este teorema se puede demostrar matemáticamente a partir de los siguientes 2 postulados:

– Postulado numero 1 : "knowledge is power" (el conocimiento es poder)

– Postulado numero 2 : "time is money" (el tiempo es dinero)

Todos conocemos el siguiente axioma:
power = work / time (potencia= trabajo/tiempo)
Como:
knowledge = power, tenemos que
knowledge = work / time
y como:
time= money

tenemos que conocimiento (knowledge) = trabajo (work) / dinero (money)

   Si en esa ecuación despejamos la variable "dinero" obtenemos

dinero = trabajo / conocimiento

   Así, si "conocimiento" se aproxima a cero, el dinero tiende al

infinito, independientemente de la cantidad de trabajo hecho.

Demostrado: cuanto menos sepas, mas ganarás.

A %d blogueros les gusta esto: