DEBIAN PRO

DEBIAN PRO
DEBIAN

lunes, 23 de diciembre de 2013

PC Componentes fiasco.


Una imágen vale mas que mil palabras.....
Una vez mas, se cumplen las profesías....

Compro un producto que tienen stock, pago un adicional por entrega en 24 hs pero........ la entrega de 24 hs es A PARTIR DE QUE LO RETIRE LA EMPRESA DE TRANSPORTES.
Si ellos demoran un dia o dos mas, están dentro del plazo !!!!

Que clase de servicio brindan ?



Será que el empaquetado, envolver en papel, la cinta que cierra todo y dárselo a la empresa de transportes demora 24 hs mas....
Y lo peor es que me dicen "QUE LES PARECE NORMAL!!!!!"
Para mi, verifico una vez mas que son "una tiendita" de Doña Rosa, estan a años luz de Amazon y nunca lo van a alcanzar, jamas, sobretodo porque creen que estan haciendo las cosas bien.


FINALMENTE LA EXPERIENCIA DICE QUE HAY QUE COMPRAR EN AMAZON Y NO EN TIENDITAS.....
PCCOMPONENTES DIDCE QUE EN 40/72 HS HABILES ME DEVOLVERÁN EL DINERO.....

(cobran en 1 minuto, pero lo devuelven en unos dias..... veremos que pasa)

"Le enviamos este email como confirmación de la cancelación del pedido 12013883716 tal y como nos ha solicitado.
Recibirá el reembolso por el importe indicado en un plazo de 48/72 horas hábiles como máximo.
PcComponentes busca continuamente la satisfacción máxima de todos nuestros clientes, y por ello, en nuestro afán por mejorar, le rogamos su colaboración para que nos confirme que el motivo de la cancelación es:
"

Portátil con FreeDos.


Esto es para mi una buena noticia, se venden portátiles con FREEDOS, un sistema operativo D.O.S. gratuito.
El link aqui.

Me parece bueno, no tener que pagar el precio de un S.O. (de la firma Ms) en la compra de un equipo, en mi caso casi siempre lo quito para poner Linux, asi que tradicionalmente pago por algo que no usaré.

Mis felicitaciones y espero que esto sea mas masivo aún.

PC Componentes again.


Hoy vuelvo a probar el servicio de PCComponentes.com.

Hace unas semanas tuve una mala experiencia y hoy trataré de volver a darles una oportunidad.... Si me preguntan "¿porqué?", porque creo que hay que dar siempre una nueva oportunidad, sobretodo si es una empresa Española (local), que está compitiendo contra gigantes (Amazon) y sobreviviendo.

* Olvido, en mi última compra fallida, con problemas, demoras y "mi mala experiencia" me dijeron "te enviaremos un envío gratuito" para la próxima compra.
Hoy no tenía ese "envío gratuito", tuve que meter un ticket en su sistema (via internet) y un rato después ya me aparecía y pude usarlo.
Me enviaron un email diciendo "perdón, nos olvidamos....", algo curioso no? Quisiera saber cuantas veces se olvidan de cobrar algo? seguro que muchas menos que de regalar algo.

* He solicitado el envío en 24 hs, costo de 4.75 que efectivamente está bonificado, pero tengo que pagar 1.95 que son "Gastos de Gestión".
También curioso, intentaré que alguien me cuente que son los gastos de "gestión", compra con tarjeta? ship. and hand.? Un pequeño costo de "venderme" ?

* Veremos si mañana recibo la compra, tengo que reconocer que no les tengo nada de confianza y hasta que no vea las cajas en casa, creo que no las recibiré mañana.
Ojalá me equivoque y tenga que tragarme estas palabras.

Por ahora, solo puedo decir "estoy esperando".


Mi pedido,
En PCCOMPONENTES cuesta 60 euros
Comprar Gigabyte GA-B75M-D3H
Fabricante: Gigabyte - P/N: GA-B75M-D3H
Cod. Artículo: 50053
Disponibilidad:


En Amazon, 57 €uros
http://www.amazon.es/Gigabyte-GA-B75M-D3H-Rev-1-0-DDR3-SDRAM/dp/B007R9CRGW/ref=sr_1_1?ie=UTF8&qid=1387798764&sr=8-1&keywords=GA-B75M-D3H
Gigabyte GA-B75M-D3H Rev. 1.0 - Placa base (DDR3-SDRAM, DIMM, Dual, Intel, Celeron, Core i3, Core i5, Core i7,... de Gigabyte
EUR 58,37
Haz el pedido en las próximas 3 horas y recíbelo el martes, diciembre 24.

Características del producto
... micro ATX - LGA1155 Socket - B75 - USB 3.0 - Gigabit LAN - Tarjeta ...
Detalles del producto
· 32768 MB DDR3 SDRAM
· Windows XP
Electrónica: Ver los 3 productos



PCCOMPONENTES
Intel Celeron G1620 2.7Ghz Box 37.00

AMAZON
Intel Celeron G1620 - Procesador (2M Cache, 2.70 GHz) Precio: EUR 35,64


ADJUNTO PANTALLAS PARA VERIFICAR mañana que pasó....

Argentum.


Con la moda de las monedas electrónicas, aparece una "Argentina"....
No, no es Patacon, no es Lecop ni tampoco Bocones....
Se llama Argentum y les deseo la mejor de las suertes, viendo los últimos 30 años en la economía Argentina, a esta moneda SI QUE LE APUESTO.
Las anteriores no valían nada, pero esta SI TIENE MUCHO FUTURO.

Gracias a los que están detras de esto por intentar salvar al pais, alguna ves alguien tenía que hacer real y de verdad por el pais.

Cobol en Silla de Ruedas.


Aunque parezca una broma de mal gusto, luego de Ruby on Rails aparece la nueva esperanza blanca en la informática.

COBOL en SILLA DE RUEDAS.

Creo que vale la pena dejar esos lenguajes modernosos, fashions y divertidos para pasarse al lado "correcto" de la programación.
No seas papanata y subite a la ola.

miércoles, 18 de diciembre de 2013

Radares.


Para el límite de velocidad.....
Anti-radares?
Detectores de radares?
Limitadores de velocidad?

Noooooo somo hackers o que ?????

lunes, 16 de diciembre de 2013

RaspBMC


Uno de los tantos usos de la Raspberry Pi es como centro multimedia, gracias a RASPBMC.
Instalación de un Plugin para ver Streaming de sitios en internet.
Por ejemplo 1channel.

Ajustes internos
- Dentro
- System
- settings
- system abajo de todo
- video output
- video calibration

System
- settings
- services
- dentro WEB SERVER
- user/pass
- remote control
- allow prograsm control xbmc

service
- zero conf

service
- smb
- share read/write


system
- system
- video output
- resolution 720

menu principal
- programs
- raspbmc settings
- system configuration
- bajar hasta llegar a system performance profiles
- PONER SUPER


Verificar el CMC en el Regza, para comandar la Raspbmx con el mando del TV.
HDMI CMC en el TV.
Toshiba - Regza Link or CE-Link


Agregar Disipadores para que no se caliente tanto la Raspberry PI




Foro ecoins


Un sitio donde consultar sobre temas de monedas electrónicas.
Crypto Concurrencia

viernes, 13 de diciembre de 2013

Equipos nuevos.


Armando 3 nuevos servidores comprados en PCComponentes.
Ya pondré fotos del modelo terminado.


Por ahora en fase BETA.

The Pirate Bay


Creo que todos los que pueden leer este post deben saber que es "The Pirate Bay".... Para los que no lo saben, es el sitio número 1 (o 2) del mundo en el tema "compartir ficheros" mediante torrents. Hay toda una historia romántica detras del sitio que les recomiendo ver en el documental de "The Pirate Bay", sus fundadores, su filosofía y como llegaron a lograr ese éxito increible.

Curiosamente en varios paises del mundo supuestamente "democráticos y abiertos" se prohibe su uso, accesos, hosts y los chicos tuvieron que mover el DNS a PERU..... Si Perú... ese pais de Latinoamérica (o SudAmerica).

Aparecen muchas preguntas de "porqué?" y "como?" pero la solución rápida que buscaban es seguir dando su excelente servicio y el nombre del producto .COM ya pasa a ser secundario hasta tal punto que todos buscamos "piratebay" sin importar la extensión final.

Otro gran paso para el universo tecnológico y otro duro golpe a gobiernos que como dice mi amigo "El Chacal"..... "es que no entienden nada"....

jueves, 12 de diciembre de 2013

Iso a Pendrive Linux


La manera mas fácil de copiar una ISO (fichero) a un Pendrive es asi:

dd if=/path/to/file.iso of=/dev/sdb

Desde Linux, con los permisos correspondientes y aunque no se ve nada en pantalla, acabará correctamente.

Gratuito, fácil, rápido y sin pérdidas de tiempo instalando aplicaciones bajadas de internet.

Programando GPIO Raspberry


Un link con información buena sobre Raspberry PI, como programar puertos. Dejo el link.

Mas información de la Wikipedia.

martes, 10 de diciembre de 2013

PC Componentes compra


La semana pasada (jueves 5) hice una compra grande en PC Componentes, principalmente porque me la recomendaron dos amigos distintos, tenían lo que buscaba comprar, el precio es bueno y "había stock".
Hice algunas comparaciones con Amazon y a precios similares, ellos "SI" tenían el producto pero en Amazon no había lo que buscaba.

A las 10:00 am me meto en el sistema y hago la compra, pago con tarjeta y todo parece ir bien.
Indico "entrega urgente" (24 hs) y pago un plus (+20 €uros) por el envío urgente.

Ahora comienzan los problemas:

* Me envían un correo diciendo que de los 8 componentes, para 3 no hay stock.
* Luego que solo falta uno de ellos.
* Trato de contactarlos por teléfono y es imposible. No hay un nro donde llamarlos para hablar con un humano.
* La solución que proponen es "entra en nuestra página y completa el ticket de incidencia".
* El viernes completo el ticket con "mis quejas" y varias alternativas.
- Porque habia stock cuando compré, pero luego parece que no.
- Porque nadie llama para decir "tener un problema y ahora no hay".
- Trabajan solo los dias "laborales", que no está mal, pero Amazon pagará mas a mas gente y trabaja los 365 dias del año, las 24 hs.
* El sábado se que trabajaron en PC Componentes, pero nadie se ocupo de mi pedido.
* Ayer lunes, me conecto a la página de Facebook y comienzo mis "reclamos por facebook".
* En ese momento ya me comienzan a llamar por teléfono, no importa el nombre de la persona, pero me dice que efectivamente no tienen stock de un producto y que en 24/48 hs lo tendrán.
* También que para ellos, son dias laborales.
* Me ofrece otro producto o enviar lo que hay "sin enviar todo".
* Habiendo pasado varios dias pido "enviarme lo que tengan", el resto ya no lo quiero.
* Del jueves al lunes habían pasado varios dias.... pero en Murcia fueron fiesta el Viernes y el Lunes.
* Luego me vuelven a llamar para decirme que como el Lunes es fiesta nadie de SEUR retirará el paquete, asi que lo podrían enviar el martes para que llegue el miércoles.
* Vuelvo a "Facebook" a volver a reclamar "la calidad del servicio que prestan".
* Me vuelven a llamar y acordamos que "llamarán a SEUR para que en forma extraordinaria" les retira la caja y la entregue hoy (MARTES).
* Tengo que entrar en su página en internet para completar mis datos para que "en unos dias alguien de PC Componentes" apruebe la devolución del dinero de la partes que no me enviaron.
* Espero que hoy realmente reciba las cajas.

MIS CONCLUSIONES
* Amazon es Amazon, y PC Componentes NO ES Amazon.
* Amazon trabaja las 24 hs, 365 dias, se opera por internet, se compra por internet, las entregas van como cohetes.
* PC Componentes no trabaja fiestas ni fines de semana, y según declaran en su WEB de 09:00 a 17:00.
* En mi mundo informático los pedidos son 24 x 365 y los envíos cada noche. Es lo que espero y Amazon lo hace.
* PC Componentes no tiene un teléfono para hablar con un humano que resuelva incidencias/excepciones.
* El sistema de venta por internet podría ser mejorado.
* Mi experiencia personal es que si no posteo en Facebook, nadie se ocupaba del pedido.
* Yo tengo que pedir (una pagina web) que me devuelvan el dinero, si ellos ya saben que no lo enviarán porque no tramitan la devolución directamente?

* Para cosas realmente URGENTES el sistema y el tiempo de entrega de Amazon es imbatible.
* Si la oferta es muy buena en otros sitios (PC Componentes) y puedes esperar unos dias, PC Componentes es buena alternativa.

jueves, 5 de diciembre de 2013

Nuevo Yeti.


LINK PARA VER FOTOS DEL NUEVO YETI...... curiosidad tecnológica.

Raspberry PI.


Ya empezamos a jugar con la Raspberry PI B, unboxing, Debian, setup, update, upgrade....
Luego cableados, mas memoria SD.
Luego raspi-config
Para lo que esperaba va muy bien la interfaz gráfica (LXDE) esta noche probaré el Firefox y algunos juegos.
En breve RASPMAME.....

sábado, 9 de noviembre de 2013

Codigo Completo con todo.


El código con todo dentro.
Display de 7 segmentos
Board con 16 Relays
Display 8 x 8 Segmentos (8x7)
Switch en PIN 10 para input.

/*

Mix demo ALL-INCLUSIVE
dac FREECODE 2013-11

30-46 connected to 16 relay board

14-21 connected to 7 segment display

10 connected to switch

ICSP conencted to 8 x 8 segment display
1 negro a 6 RCK
2 azul a NADA
3 blanco a SCK
4 gris a DID
6 violet a GND

XXXXXXXX
1 PUNTO
2 cen
3 arr izq
4 aba izq
5 aba
6 aba der
7 arr der
8 arr

*/

#include

const byte LATCH = 51;
String inputString = "";
boolean stringComplete = false;
String conv = "";

void setup() {

digitalWrite(SS, HIGH);
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV2);

digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // INICIO ultimo digito
SPI.transfer (B11000000); // esta en cero
digitalWrite (LATCH, HIGH);


Serial.begin(9600);
inputString.reserve(20);

pinMode(10, INPUT);

int i = 0;
for (i == 0; i<16; i++)
{
pinMode(30+i, OUTPUT);
digitalWrite(30+i, HIGH);
}

int j = 0;
for (j == 0; j<8; j++)
{
pinMode(14+j, OUTPUT);
digitalWrite(14+j, HIGH);
}
}



void loop() {
if (stringComplete) {

Serial.println( digitalRead (10) );
if ( (inputString.length()-1) <= 10)
{
converso();
digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // ULTIMO DIGITO
SPI.transfer (B11111001); // 1
digitalWrite (LATCH, HIGH);

int k = 0;
for (k == 0; k {
if ( inputString[k] == '1')
{
// Serial.println( '1' );
digitalWrite(14+k, LOW);
}
else
{
// Serial.println( '0' );
digitalWrite(14+k, HIGH);
}
}
}
else
{
digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // ultimo digito
SPI.transfer (B10100100); // 2
digitalWrite (LATCH, HIGH);

int l = 0;
for (l == 0; l {
if ( inputString[l] == '1')
{
// Serial.println( '1' );
digitalWrite(30+l, LOW);
}
else
{
// Serial.println( '0' );
digitalWrite(30+l, HIGH);
}
}
};

// Serial.println(inputString);
inputString = "";
stringComplete = false;
}
}


void converso () {
// if (inputString =='11111111')
conv = "";
// 'B10000000';

// if (inputString =='00000001')
// conv = 'B00000001';

// if (inputString =='00000010')
// conv = 'B00000011';
}

void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
// end of code

Arduino Mega y Display 8 x 7 segmentos


Finalmente estoy encontrando la solución para comandar el display.

El link a DX del Display.

Pensé que sería algo mas fácil, y aún no lo tengo al 100%.


El pinout, usé la interfaz ICSP :
1 negro a 6 RCK
2 azul a NADA
3 blanco a SCK
4 gris a DID
6 violet a GND
Un punto importante es que no conecté el pin de voltaje


Mi código ejemplo es este.


#include
const byte LATCH = 51;

void setup ()
{
digitalWrite(SS, HIGH);
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);
}


void loop ()
{
unsigned int pattern;

// 1 PUNTO
// 2 cen
// 3 arr izq
// 4 aba izq
// 5 aba
// 6 aba der
// 7 arr der
// 8 arr

digitalWrite (LATCH, LOW);
SPI.transfer (B11111111); // TODO ON
SPI.transfer (B00000000); // 8 y punto ENCENDIDO
digitalWrite (LATCH, HIGH);
delay(300);

digitalWrite (LATCH, LOW);
SPI.transfer (B11111111); // TODO ON
SPI.transfer (B11111000); // siete
digitalWrite (LATCH, HIGH);
delay(300);

digitalWrite (LATCH, LOW);
SPI.transfer (B10000100); // 3 y ultimo
SPI.transfer (B10000000); // 8
// SPI.transfer (B00000010); // decenas
// SPI.transfer (B11111000); // 7
// SPI.transfer (B00000001); // unidades
// SPI.transfer (B11111001); // 1
digitalWrite (LATCH, HIGH);
delay(1000);


digitalWrite (LATCH, LOW);
SPI.transfer (B10101010); // en 1 3 5 7
SPI.transfer (B00000000); // 8chos
digitalWrite (LATCH, HIGH);
delay(300);

digitalWrite (LATCH, LOW);
SPI.transfer (B10000000); // 8vo segment
SPI.transfer (B11111001); // un uno
digitalWrite (LATCH, HIGH);
delay(300);


digitalWrite (LATCH, LOW);
SPI.transfer (B01000000); // 7mo segment
SPI.transfer (B10100100); // un DOS
digitalWrite (LATCH, HIGH);
delay(300);


// un 8 en el 8vo display
digitalWrite (LATCH, LOW);
SPI.transfer (B10000000);
SPI.transfer (B10000000);
digitalWrite (LATCH, HIGH);
delay(300);



// 9 y punto
digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0x10));
SPI.transfer (lowByte (0x10));
digitalWrite (LATCH, HIGH);
delay(300);

// CERO y punto
digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0x40));
SPI.transfer (lowByte (0x40));
delay(300);
digitalWrite (LATCH, HIGH);

// letra o minuscula
digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0x23));
SPI.transfer (lowByte (0x23));
delay(300);
digitalWrite (LATCH, HIGH);

digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0xF));
SPI.transfer (lowByte (0xF));
delay(300);
digitalWrite (LATCH, HIGH);

digitalWrite (LATCH, LOW);
SPI.transfer (highByte(0xA));
SPI.transfer (lowByte (0xA));
delay(300);
digitalWrite (LATCH, HIGH);

delay(1000);
}


jueves, 7 de noviembre de 2013

Lync in Linux


Para hacer funcionar mi equipo Linux con LYNC, he seguido la siguiente secuencia.

Instalar pidgin pidgin-sipe
# apt-get install pidgin pidgin-SIPE

Agregar una cuenta (+ADD)
Protocol Office Communicator.
Username Nombre.Apellido@Dominio.com
LOGIN USER
dominio\usuario
clave
Remember Password

Y listo.... voila. Funcionando.

Display 7 segmentos Arduino Mega


Luego de unas cuantas horas de investigación, logré que funcione un nuevo display de 8 x 7 segmentos (aunque en realidad es de 8 x 8 segmentos).
Usando Arduino Mega R3 y el display de la foto (8 x 8 VCC, GND, DIO, SCK, RCK), 8 displays con 7 segmentos, pero que tienen un punto decimal también, asi que sería un 8 x 8.

Algo de info SPI aca.


Usé los pines 1,2,3,4 y 6.

1 - RCK
2 - VCC
3 - SCK
4 - DIO
6 - GND


El código demo es este:


#include
const byte LATCH = 4;
const byte numberOfChips = 8;

byte LEDdata [numberOfChips]; // initial pattern

void refreshLEDs ()
{
digitalWrite (LATCH, LOW);
for (byte i = 0; i < numberOfChips; i++) SPI.transfer (LEDdata [i]); digitalWrite (LATCH, HIGH); } // end of refreshLEDs void setup () { SPI.begin (); } // end of setup void showPattern (const unsigned int p1, const unsigned int p2) { LEDdata [0] = highByte (p1); LEDdata [1] = lowByte (p1); LEDdata [2] = highByte (p2); LEDdata [3] = lowByte (p2); refreshLEDs (); delay (100); } // end of showPattern void loop () { unsigned int pattern; pattern = 1; for (int i = 0; i < 16; i++) { showPattern (pattern, pattern); pattern <<= 1; } pattern = 0x8000; for (int i = 0; i < 16; i++) { showPattern (pattern, pattern); pattern >>= 1;
}

pattern = 1;
for (int i = 0; i < 16; i++) { showPattern (~pattern, ~pattern); pattern <<= 1; } pattern = 0x8000; for (int i = 0; i < 16; i++) { showPattern (~pattern, ~pattern); pattern >>= 1;
}

} // end of loop




domingo, 3 de noviembre de 2013

D.O.S. demo


Si, es de los ´80, pero hace lo que tiene que hacer...

---- DEMO.BAT -------
INICIO:
ECHO OFF
CLS
echo 1000000000000000 > COM3:
sleep -m 250
echo 0100000000000000 > COM3:
sleep -m 250
echo 0010000000000000 > COM3:
sleep -m 250
echo 0001000000000000 > COM3:
sleep -m 250
echo 0000100000000000 > COM3:
sleep -m 250
echo 0000010000000000 > COM3:
sleep -m 250
echo 0000001000000000 > COM3:
sleep -m 250
echo 0000000100000000 > COM3:
sleep -m 250
echo 0000000000000000 > COM3:
sleep -m 250
demo.bat

sábado, 2 de noviembre de 2013

Pantallas


Pantalla del móvil con la mini-interfaz para controlar el Arduino.
Desde Internet o con Wifi desde casa le puedo enviar órdenes para que active cosas.


Si, ya se que son 12 botones muuuuuuy simples, pero me alcanza para el control del dispositivo.

Arduino y relays


Llevo unas semanas jugando con electrónica, programando en C, Perl, html y varios sistemas operativos.
Hasta hoy las cosas que he probado:

* Programar un Arduino con un código simple que dados NN bits, los pase a los puertos 40 en adelante.
En esos puertos tengo conectada otra placa con 16 relays para encender/apagar cosas, relays de 250 volts y 10 amperes, lo que es bastante.

* El mismo código arduino pero dados 8 bits, los pasa al puerto 14 en adelante.
En esos 8 pin outs, tengo conectado un Display de 7 segmentos (curiosamente traen 8 porque incluyen un punto).

* También le conecté a la placa un switch en el puerto 10 para leer un SI/NO.

* Metí Arduino y relays en una caja comprada por 2 euros en "Los chinos"... agujeros para sacar cable USB y en breve mas agujeros para conectar cables a los relays.

* Armado de programas Python para control de relays y display 7 segmentos.

* Armado de programa para conectar Linux con Un controlador que armó Douglas, enviar 2 caracteres para control de relays.

* Armado de programa que dados NN bits los pase al Arduino directamente. Para faciliar la interacción desde y hacia la placa.

* Probé Cygwin para poder correr programas C en Linux (en Windows),
Para enviar bits al Arduino, existe una manera mas facil aun.

WINDWOS CYGWIN
echo 00000000 > /dev/ttyS2

WINDOWS
echo 1111111 > com3:

* Luego armado de páginas HTML y PERL para interactuar desde internet, donde las peticiones llegan a un web publicado en internet y controlar al arduino.

* Luego COPIA DE TODO por las dudas...

* Ahora estoy armando luces de Leds de bajo consumo de 4 watts, para conectar hasta 16 a los relays, para hacer juegos de luces de colores. Pero necesito latas donde meter las luces y papeles de colores. Trabajos manuales para mis hijas.

* En camino vendrán mas cosas, un display de 5 displays de 7 segmentos, cables para conectar mas cosas, luces de colores de tira, un adaptador USB a SERIAL y algunas cosas mas que ya ni recuerdo.


* Todo esto funciona a 12 volts, para evitar problemas de riezgos eléctricos para los chicos.
Voy a preparar varios experimentos mas con ventiladores, motores y mas cosas.

* Recomiendo que prueben el programa MIXXX que es similar al Tracktor DJ pero gratuito.













lunes, 21 de octubre de 2013

I.Explorer en Linux


Dos monitores "pegados" y el Internet Explorer corriendo en Linux Ubuntu 13.10

Nemo


Me acostumbré a usar Nemo como manejador de ficheros (también MC en Texto), pero en Ubuntu 13.10 no viene, así que el proceso es el siguiente.

$ sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-stable
$ sudo apt-get update
$ sudo apt-get install nemo

Y listo.

viernes, 18 de octubre de 2013

Ubuntu 13.10 sin Silverlight.


Luego de actualizar de 13.04 a 13.10 veo que ya no funciona SilverLight (pipeLight)....
La pantalla se queda negra y no muestra nada.... a buscar que hacer.

Curioso, pero parece que si arranco el Firefox como ROOT si funciona, pero con una cuenta personal no funciona.
Tendré que verificar los permisos.

Foto en el logon en Ubuntu


Encontré que si creo un fichero llamado
".face"
en la carpeta local de un usuario
"/home/usuario"
al hacer login aparece esa imágen.
Probé con JPG pero seguramente con otros formatos también funciona.

Impresora de Red en Linux


Para hacer funcionar una impresora de red en Linux.
Http://127.0.0.1:631
Ir a ADMINISTRACION
seleccionar ADD PRINTER
seleccionar INTERNET PRINTING PROTOCOL(ipp)
indicar IPP://192.168.0.XX/ipp (IP de la impresora en red)
seleccionar el Driver de la lista de "conocidas", o "similares" y sinó utilizar el fichero XXXXX.PPD (bajado de internet)

Links de la semana


Programa para Configurar la impresora,
/usr/lib/libreoffice/program/spadmin
dentro de LibreOffice.


Desde Bash abrir una sesión en un Windows con Rdesktop y validarse
rdesktop 192.168.0.1 -u USER -pxxxxxxx -0 -z
Por ahora no logro que ejecute algo en destino, solo que abra la sesión y se conecte.


Instalación de Drivers FTDI en Linux, en la página los ofrecen para 32 y 64 bits
http://www.ftdichip.com/Support/Documents/AppNotes/AN_220_FTDI_Drivers_Installation_Guide_for_Linux%20.pdf
Pero en otras páginas dicen que SOLO FUNCIONAN EN 32 BITS.



Una web en pruebas, gratuito y con diseños muy profesionales.
Luego de armar todo, puedes bajarte una copia y tienes una web de mucha calidad en 10 minutos.



Para los que tengan Linux y CUPS corriendo, sabían que hay una interfaz web para configurar Impresoras?
http://127.0.0.1:631
Desde el navegador del propio equipo pueden ver impresoras, drivers, tareas y mas cosas.


Como hacer funcionar páginas con SilverLight en Linux?
Existe PipeLight, la versión libre, y funciona.
http://www.ubuntugeek.com/pipelight-using-silverlight-in-linux-browsers.html


Un board para USB y con 8 relays para hacer domótica barata, el mismo modelo existe en DX y ebay por 20 euros.
http://denkovi.com/productv/31/usb-eight-channel-relay-board-for-automation-12v.html#examples


En LINUX se pueden programar cosas para ARDUINO, instalar ARDUINO y CORE, como mínimo
apt-get install ARDUINO y ARDUINO-CORE
Pedí una placa MEGA r3 pero sigo mirando el nuevo Arduino Galileo, que vendrá con chip intel... ahhhh que placer


Una demo muy buena de un sitio, gratis, rápido y muy bonito.
http://www.wix.com/sample/website-viewer?lng=es&tmpurl=http%3A%2F%2Fwww.wix.com%2Fhtml-templates%2Fhtml%2Fweb%2Fwedding-01-orly&tmpimage=http%3A%2F%2Fstatic.parastorage.com%2Fmedia%2F919f63b4db8b9b52073084a372be457d.wix_mp&siteurl=http%3A%2F%2Fwww.christinahphoto.com%2F%23!home%2FmainPage


Desde Linux, se puede capturar audio, video y sacar fotos de una o mas cámaras fácilmente con VLC.
Generar video en algún codec especial y todo esto "gratis"...

http://serverfault.com/questions/288137/how-to-stream-live-video-from-a-linux-server

Otro link con el HOW-TO.



Datos sobre Joysticks para usar como interfaces de entrada de datos analógicas o digitales.


Luego de leer "El hombre anumérico" me gustaría leer otros, alguien me los puede prestar?
John Paul Allen.
1988: Pienso luego río.
1990: El hombre anumérico.
1993: Más allá de los números.
1996: Un matemático lee el periódico.
1999: Érase una vez un número.
2004: Un matemático invierte en bolsa.
2007: Elogio de la irreligión.

Para los que no lo leyeron, se los recomiendo 100%. El Hombre anumérico es realmente bueno.

Ubuntu 13.10


Finalmente han liberado el "tan esperado" Ubuntu 13.10,


El sistema rápido de ACTUALIZACION
do-release-upgrade -c
do-release-upgrade
Aunque recomiendo aprovechar y bajar el ISO e instalar desde cero con ese ISO, porqué ?
Para comenzar desde cero una nueva etapa y sanear las cosas instaladas que metí en el equipo y me olvidé de quitar.


Uso Ubuntu a diario en el trabajo desde hace unos 3 años, todos los dias, corro máquinas virtuales en "otros" sistemas operativos y tengo que decir que me parece el gran sistema operativo del momento.

Se que para algunos, Windows es su dia a dia, para otros OS X y para otros "Debian"... todos los respetables, en mi caso y es mi elección uso Ubuntu.

He logrado aprovechar al máximo los portátiles que uso con Ubuntu, desde hace un tiempo tengo un Asus I7, 8 cores, 8 gb, disco SSD que "para mi" vuela.

He logrado hacer Demos, proyectos y probar cientos de cosas con una gran confianza al instalar cosas, luego puedo quitarlos limpiamente, varios de los proyectos en curso los llevo con Ubuntu y muchas de esas "cositas" con que jugamos funcionan perfectamente.
Con la instalación de programas crece el espacio en disco muuuuuuyyyyyyyyy lentamente, algunos laboratorios los llevo en máquinas virtuales asi que están aislados también con un consumo de discos realmente bajo.

Me ha pasado que al instalar un Win 7, meterle las herramientas básicas para programar algo, el antivirus, libreOffice y tres cosas mas, llegaba a 50 gb. Y eso para empezar.
Son espacios en disco que intento no consumir, teniendo discos de 128 gb.

Para algunas pruebas de Arduino, Raspberry Pi, FTDI, en 10 minutos pude instalar los kits de desarrollo y ponerme a jugar con ellos.
En el caso de Raspberry tengo funcionando un equipo nativo ARM corriendo Raspbian en un equipo virtual.
Y para los que no lo vieron tengo un OS X 10.9 también en virtual.

En algunos momentos uso 3 máquinas virtuales, Raspbian, Ubuntu y Windows sobre mi máquina real Ubuntu. La ventaja de los 8 cores y 8 gb RAM es enorme.

Como chiste personal, la semana pasada vinieron unos amigos de mi hija y me vieron trabajando en OS X pero en un portátil ASUS, me preguntaban "eso es una MAC?", "porque negra?", "como es que NO ES una MAC?" "como haces para tener una mac en tu portátil?"

Mi hija siempre con la misma respuesta "es informático...."

Sources.list


MI LISTA completa de Repositorios.

# deb cdrom:[Ubuntu 13.04 _Raring Ringtail_ - Release amd64 (20130424)]/ raring main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ saucy main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ saucy main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ saucy-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ saucy-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ saucy universe
deb-src http://us.archive.ubuntu.com/ubuntu/ saucy universe
deb http://us.archive.ubuntu.com/ubuntu/ saucy-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ saucy-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://us.archive.ubuntu.com/ubuntu/ saucy multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ saucy multiverse
deb http://us.archive.ubuntu.com/ubuntu/ saucy-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ saucy-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ saucy-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ saucy-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu saucy-security main restricted
deb-src http://security.ubuntu.com/ubuntu saucy-security main restricted
deb http://security.ubuntu.com/ubuntu saucy-security universe
deb-src http://security.ubuntu.com/ubuntu saucy-security universe
deb http://security.ubuntu.com/ubuntu saucy-security multiverse
deb-src http://security.ubuntu.com/ubuntu saucy-security multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu raring partner
# deb-src http://archive.canonical.com/ubuntu raring partner

## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
deb http://extras.ubuntu.com/ubuntu saucy main
deb-src http://extras.ubuntu.com/ubuntu saucy main

viernes, 11 de octubre de 2013

Amplio, lento y costoso.


PYTHON / RUBY
El costo de Diseñar algo tan amplio, diverso, multifuncional, mixto....
Y dije Python y Ruby pero podría haber dicho otros tantos lenguajes.

Hace tiempo me vendieron que el código abierto, libre, Linux y GNU eran la alternativa blanca a muchas cosas, porque me permitían seleccionar que quiero, que no, adaptarlo, mejorarlo, activarlo, apagarlo, simplificarlo, ampliarlo....

La realidad es que luego de dos semanas haciendo de "programador" me doy cuenta que vamos mal y hemos perdido el norte.

Para hacer andar cualquiera de los lenguajes "fashions" actuales, requiere de varias horas, bajando partes, componentes, modulos y ademas instalando instaladores para bajar los módulos que quiero.
Me recuerda en parte a PERL, pero peor.
Digamos que para hacer funcionar un módulo tuve que aprender muchisimas cosas de Python, sus módulos, aprender a instalar un instalador, aprender a usarlo nuevamente, etc.etc... Digamos que varias horas.

Luego ya me pude poner a adaptar el código, pero primero el entorno y fue demasiado tiempo.

Se que no es fácil pero porque no hacen un instalador "sencillo" que se baje lo que necesite y listo?
(hablo de Python en Debian... casi un parto)


Luego a la hora de buscar un módulo para que haga algo concreto lo mismo, 500 módulos similares..... Y cada uno se instala a su manera con sus caracteristicas.... Por suerte acabé la BETA y ahora le tocará a coders mejores.


Programador y GPL.


Un programador que no quiere recibir mas emails..... culpa de la licencia GPL.

Hace una semana bajé un módulo para python para interactuar con páginas web, básicamente se conecta, trae, ordena y graba en ficheros. Simple, rápido y realmente tonto.

Pero era lo que buscaba, poder acceder a ciertos datos y generar un TXT en mi server.

Tuve un problema al instalarlo y contacté con el desarrollador (email), me preguntó de que sitio había bajado el código, porque era algo que había hecho hace mas de 8 años y que olvidó por completo, apenas se acordaba de que era y que quería saber donde estaba publicado para quitarlo, porque "cientos de personas" en todo el mundo le escriben (igual que yo)....

Ahi me pregunté si GNU o GPL no estarán generando un gran problema a futuro, donde subo un código y si es bueno, o hace algo que muchos quieren, lo bajarán gratis, lo usarán y si "algo no esta perfecto" me escribirán para preguntarme sobre el código.

El programador no estaba enfadado, simplemente que quería tratar de borrar su email del código para que no le escriban permanentemente por eso.

Curiosidades... nada mas.

Mac o Asus


¿ Notebook ASUS / APPLE ?

Mi portátil personal es un Asus I7 con 8 cores, 8 gb ram, 512 gb, 2 usbs 3.0, teclado completo y numérico... para mi fue uno de las mejores portátiles del mercado por un precio "mas que barato". (€ 600)
La veo como un gran equipo, potente y liviano, por dos monedas, para mi cumple todas mis espectativas, vino con Windows 7, probé un 8.1, le puse un disco SSD y lo usé durante unos meses con Ubuntu 64 Desktop, que me sigue pareciendo la mejor alternativa en S.O. (todavía).

http://www.amazon.com/ASUS-K55A-DS71-15-6-Inch-Laptop-Mocha/dp/B00BCHHZGW/ref=sr_1_2?s=electronics&ie=UTF8&qid=1381227099&sr=1-2&keywords=asus+a55a

http://www.amazon.com/ASUS-K55A-DS71-15-6-Inch-Laptop-Mocha/dp/B00BCHHZGW/ref=sr_1_2?s=electronics&ie=UTF8&qid=1381227099&sr=1-2&keywords=asus+a55a#productDetails

En el disco original instalé el 7 original y unos 20 juegos de los pesados (FPS).

En otro disco SSD de 128 gb instalé Ubuntu 13.04 64 bits, con VMWare uso máquinas virtuales, tengo Win7, Debian7.1, SLES 11, Win81 y una OSx10.8 con la que juego cada tanto para sentir "la experiencia OSX"...
En algún tiempo tenía PCBSD pero ya no la actualizo y quedó en la historia, creo que las líneas son Win, Linux y OSX.

Desde hace unos meses la publiqué en Segundamano.es y me suelen mandar ofertas de canje por telefonos, ofertas de compras muy bajas y canjes con hard que no me interesa.

La semana pasada me ofrecieron cambiar el portátil por un Apple Macbook Pro, me puse a pensar que tal sería volver a probar equipos Apple originales, agui mis pensamientos, que como siempre no son "la verdad del universo y mas alla", simplemente mis ideas.



VENTAJAS DE MI PORTATIL

Costo de comprar mi Asus € 600, un equipo nuevo similar en AppleStore es MacBookPro 15" € 1800
Puedo correr Windows, Linux y otros S.Operativos en forma nativa. Viene que licencia Windows 7.
Puedo correr VMWare y en virtual los mismos S.O. pero "ademas" un OSX 10.8.
Tiene 8 cores y 8 gb ram que es bastante para lo que necesito a diario (2 maquinas VMs)
Puedo abrirla y ponerle mas ram y otros discos, eso me permite que por 80 euros le coloco un disco SSD nuevo y correr otro S.O. nativo.
En un futuro con discos SSD de 512 y 32 gb ram, abrir, cambiar y listo. (y hasta lo puedo hacer yo mismo)
Tengo 2 usb 3.0, para colocar discos externos 3.0 y además copiar a una buena velocidad.
Tengo salida de video HDMI y XVGA, puedo conectarle cualquier TV o Monitor externo. Sin comprar nada mas.
Un teclado y ratón "standard" que además son los mismos que en mi trabajo y en todos los equipos que "no sean" Apple, hoy en dia usar un teclado/mouse Apple implica adaptar un poco donde están las cosas y re-aprender como hacer las cosas diarias (shortcuts)
La placa de video no es de las mejores, pero alcanza para lo que uso, si corren los mejores 20 juegos FPS es suficiente para mi.


Comparativa de placas de video
http://www.solonotebooks.net/video_cards/?video_card=26

Comparativa CPU
http://www.cpubenchmark.net/cpu.php?cpu=Intel+Core+i7-3630QM+%40+2.40GHz&id=1444


Acabo de descubrir que el color es "Mocha".... eso SI es un valor diferencial y una gran "experiencia de uso".





Semana activa


Información y links de esta semana.

Módulo en Python para interactuar con Python. Simple y directo.
python-twitter
http://code.google.com/p/python-twitter/

TWEEPY es otro, pero aún no lo configuré.

Un modulo simple json para acceder a datos.
http://simplejson.readthedocs.org/en/latest/

UDOO
El nuevo raspberry pi + arduino, aunque mas caro, mas posibilidades
Creo que vale la pena esperar un poco para que baje de precio y comprarlo.
http://www.udoo.org/

MAC
Un defragmentador de discos para MAC, pero también sirve para equipos virtuales con OS X.
Doy fe.
http://www.cocoaosx.com/2012/01/10/como-acelerar-osx-lion-mientras-duermes/


Costos de electrónica para proyectos.
Precios de electrónica Alcalá, puede haber mas baratos.

5 metros de cinta de color led, 34 €uros

Rasperry PI con caja 45€

arduino mini 13 pins 20 €
arduino 13 pins 29 €
arduino 53 pins 60 €

un relay 5v 3.75 €uros

3 sensores de movimiento 5.90 €uros




viernes, 4 de octubre de 2013

Python demo 3


Demo3, boometro....


#!/usr/bin/python
#
# Control de Nivel - llena de abajo hacia arriba
# Encendido Apagado y nro directo
#
# 2013-10 V 1.
#

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
import subprocess
import os


class ControlWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.mainWidget = QWidget(self)
self.setCentralWidget(self.mainWidget)

self.grid = QGridLayout()
self.grid.columnCount = 2
self.grid.setSpacing(10)
self.mainWidget.setLayout(self.grid)

self.setWindowTitle('Control Central - Nivel Altura')

self.status = [0, 0, 0, 0, 0, 0, 0, 0]

self.font = QFont("", 0, QFont.Bold, False)
self.font.setPointSize(self.font.pointSize() * 2)

menubar = self.menuBar()
file = menubar.addMenu('&Acciones')

dealmenu = QAction('TODOS ON', self)
dealmenu.setShortcut('Ctrl+N')
dealmenu.setStatusTip('Todos los contactos ON')
self.connect(dealmenu, SIGNAL('triggered()'), self.dTodos)
file.addAction(dealmenu)

dealmenu = QAction('TODOS OFF', self)
dealmenu.setShortcut('Ctrl+F')
dealmenu.setStatusTip('Todos los contactos OFF')
self.connect(dealmenu, SIGNAL('triggered()'), self.dNada)
file.addAction(dealmenu)

exit = QAction('Exit', self)
exit.setShortcut('Ctrl+Q')
exit.setStatusTip('Exit application')
self.connect(exit, SIGNAL('triggered()'), SLOT('close()'))
file.addAction(exit)

self.labelEstado = QLabel('%s' % self.status)
self.grid.addWidget( self.labelEstado, 4, 2)
self.dSalida()




# Switches uno a uno

self.B1on = QPushButton("SEG 1")
# self.B1on.setCheckable(True)
self.grid.addWidget(self.B1on, 1, 1, 1, 1)
self.connect(self.B1on, SIGNAL('clicked()'), self.dB1on)

self.B2on = QPushButton("SEG 2")
# self.B2on.setCheckable(True)
self.grid.addWidget(self.B2on, 2, 1, 1, 1)
self.connect(self.B2on, SIGNAL('clicked()'), self.dB2on)

self.B3on = QPushButton("SEG 3")
# self.B3on.setCheckable(True)
self.grid.addWidget(self.B3on, 3, 1, 1, 1)
self.connect(self.B3on, SIGNAL('clicked()'), self.dB3on)

self.B4on = QPushButton("SEG 4")
# self.B4on.setCheckable(True)
self.grid.addWidget(self.B4on, 4, 1, 1, 1)
self.connect(self.B4on, SIGNAL('clicked()'), self.dB4on)

self.B5on = QPushButton("SEG 5")
# self.B5on.setCheckable(True)
self.grid.addWidget(self.B5on, 5, 1, 1, 1)
self.connect(self.B5on, SIGNAL('clicked()'), self.dB5on)

self.B6on = QPushButton("SEG 6")
# self.B6on.setCheckable(True)
self.grid.addWidget(self.B6on, 6, 1, 1, 1)
self.connect(self.B6on, SIGNAL('clicked()'), self.dB6on)

self.B7on = QPushButton("SEG 7")
# self.B7on.setCheckable(True)
self.grid.addWidget(self.B7on, 7, 1, 1, 1)
self.connect(self.B7on, SIGNAL('clicked()'), self.dB7on)

self.B8on = QPushButton("SEG 8")
# self.B8on.setCheckable(True)
self.grid.addWidget(self.B8on, 8, 1, 1, 1)
self.connect(self.B8on, SIGNAL('clicked()'), self.dB8on)



self.BTodo = QPushButton("TODOS")
self.grid.addWidget(self.BTodo, 1, 2, 1, 1)
self.connect(self.BTodo, SIGNAL('clicked()'), self.dTodos)

self.BNada = QPushButton("NINGUNO")
self.grid.addWidget(self.BNada, 2, 2, 1, 1)
self.connect(self.BNada, SIGNAL('clicked()'), self.dNada)

quitbutton = QPushButton("SALIR")
self.grid.addWidget(quitbutton, 8, 2)
self.connect(quitbutton, SIGNAL('clicked()'), self, SLOT('close()'))





# 0
def dB1on(self) :
for j in range (0,8):
self.status[j] = 1
os.system("echo " + str(j + 1) + " on")
self.dSalida()


def dB2on(self) :
for j in range (0,8):
if j <= 0: self.status[j] = 0 os.system("echo " + str(j + 1) + " off") else: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dB3on(self) : for j in range (0,8): if j <= 1: self.status[j] = 0 os.system("echo " + str(j + 1) + " off") else: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dB4on(self) : for j in range (0,8): if j <= 2: self.status[j] = 0 os.system("echo " + str(j + 1) + " off") else: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dB5on(self) : for j in range (0,8): if j<= 3: self.status[j] = 0 os.system("echo " + str(j + 1) + " off") else: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dB6on(self) : for j in range (0,8): if j <= 4: self.status[j] = 0 os.system("echo " + str(j + 1) + " off") else: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dB7on(self) : for j in range (0,8): if j <= 5: self.status[j] = 0 os.system("echo " + str(j + 1) + " off") else: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dB8on(self) : for j in range (0,8): if j <= 6: self.status[j] = 0 os.system("echo " + str(j + 1) + " off") else: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dTodos(self) : for j in range (0,8): if self.status[j] == 0: self.status[j] = 1 os.system("echo " + str(j + 1) + " on") self.dSalida() def dNada(self) : for j in range (0,8): if self.status[j] == 1: self.status[j] = 0 os.system("echo "+ str(j + 1) + " off") self.dSalida() def dSalida(self): self.labelEstado.setText('%s' % self.status) self.Textos = "echo `date` - "+ str(self.status) +" >> control.log"
os.system(self.Textos)


if __name__ == '__main__':
os.system("echo `date` 'Starting Control' >> control.log")
app = QApplication(sys.argv)
win = ControlWindow()
win.show()
app.exec_()
os.system("echo `date` 'Finishing Control' >> control.log")

#
# fin de codigo
#

Python demo2


Segundo demo de interfaz para control.
Display de 7 segmentos.


#!/usr/bin/python
#
# Display 7 segmentos
# Encendido Apagado y nro directo
#
# 2013-10 V 1.
#

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
import subprocess
import os


class ControlWindow(QMainWindow):
def __init__(self):

QMainWindow.__init__(self)

self.mainWidget = QWidget(self)
self.setCentralWidget(self.mainWidget)


self.grid = QGridLayout()
self.grid.columnCount = 6
self.grid.setSpacing(10)
self.mainWidget.setLayout(self.grid)

self.setWindowTitle('Control Central - Display 7 segmentos')

self.status = [0, 0, 0, 0, 0, 0, 0, 0]

self.font = QFont("", 0, QFont.Bold, False)
self.font.setPointSize(self.font.pointSize() * 2)

menubar = self.menuBar()
file = menubar.addMenu('&Acciones')

dealmenu = QAction('TODOS ON', self)
dealmenu.setShortcut('Ctrl+N')
dealmenu.setStatusTip('Todos los contactos ON')
self.connect(dealmenu, SIGNAL('triggered()'), self.dTodos)
file.addAction(dealmenu)

dealmenu = QAction('TODOS OFF', self)
dealmenu.setShortcut('Ctrl+F')
dealmenu.setStatusTip('Todos los contactos OFF')
self.connect(dealmenu, SIGNAL('triggered()'), self.dNada)
file.addAction(dealmenu)

exit = QAction('Exit', self)
exit.setShortcut('Ctrl+Q')
exit.setStatusTip('Exit application')
self.connect(exit, SIGNAL('triggered()'), SLOT('close()'))
file.addAction(exit)

self.labelEstado = QLabel('%s' % self.status)
self.grid.addWidget( self.labelEstado, 6, 2)
self.dSalida()


# Switches uno a uno

self.B1on = QPushButton("SEG 1")
# self.B1on.setCheckable(True)
self.grid.addWidget(self.B1on, 1, 2, 1, 1)
self.connect(self.B1on, SIGNAL('clicked()'), self.dB1on)

self.B2on = QPushButton("SEG 2")
# self.B2on.setCheckable(True)
self.grid.addWidget(self.B2on, 2, 1, 1, 1)
self.connect(self.B2on, SIGNAL('clicked()'), self.dB2on)

self.B3on = QPushButton("SEG 3")
# self.B3on.setCheckable(True)
self.grid.addWidget(self.B3on, 2, 3, 1, 1)
self.connect(self.B3on, SIGNAL('clicked()'), self.dB3on)

self.B4on = QPushButton("SEG 4")
# self.B4on.setCheckable(True)
self.grid.addWidget(self.B4on, 3, 2, 1, 1)
self.connect(self.B4on, SIGNAL('clicked()'), self.dB4on)

self.B5on = QPushButton("SEG 5")
# self.B5on.setCheckable(True)
self.grid.addWidget(self.B5on, 4, 1, 1, 1)
self.connect(self.B5on, SIGNAL('clicked()'), self.dB5on)

self.B6on = QPushButton("SEG 6")
# self.B6on.setCheckable(True)
self.grid.addWidget(self.B6on, 4, 3, 1, 1)
self.connect(self.B6on, SIGNAL('clicked()'), self.dB6on)

self.B7on = QPushButton("SEG 7")
# self.B7on.setCheckable(True)
self.grid.addWidget(self.B7on, 5, 2, 1, 1)
self.connect(self.B7on, SIGNAL('clicked()'), self.dB7on)

self.B8on = QPushButton("SEG 8")
# self.B8on.setCheckable(True)
self.grid.addWidget(self.B8on, 10, 2, 1, 1)
self.connect(self.B8on, SIGNAL('clicked()'), self.dB8on)


# Numeros digitales 7 segmentos

self.Bn0 = QPushButton("0")
self.grid.addWidget(self.Bn0, 1, 4, 1, 1)
self.connect(self.Bn0, SIGNAL('clicked()'), self.dBn0)

self.Bn1 = QPushButton("1")
self.grid.addWidget(self.Bn1, 2, 4, 1, 1)
self.connect(self.Bn1, SIGNAL('clicked()'), self.dBn1)

self.Bn2 = QPushButton("2")
self.grid.addWidget(self.Bn2, 3, 4, 1, 1)
self.connect(self.Bn2, SIGNAL('clicked()'), self.dBn2)

self.Bn3 = QPushButton("3")
self.grid.addWidget(self.Bn3, 4, 4, 1, 1)
self.connect(self.Bn3, SIGNAL('clicked()'), self.dBn3)

self.Bn4 = QPushButton("4")
self.grid.addWidget(self.Bn4, 5, 4, 1, 1)
self.connect(self.Bn4, SIGNAL('clicked()'), self.dBn4)

self.Bn5 = QPushButton("5")
self.grid.addWidget(self.Bn5, 6, 4, 1, 1)
self.connect(self.Bn5, SIGNAL('clicked()'), self.dBn5)

self.Bn6 = QPushButton("6")
self.grid.addWidget(self.Bn6, 7, 4, 1, 1)
self.connect(self.Bn6, SIGNAL('clicked()'), self.dBn6)

self.Bn7 = QPushButton("7")
self.grid.addWidget(self.Bn7, 8, 4, 1, 1)
self.connect(self.Bn7, SIGNAL('clicked()'), self.dBn7)

self.Bn8 = QPushButton("8")
self.grid.addWidget(self.Bn8, 9, 4, 1, 1)
self.connect(self.Bn8, SIGNAL('clicked()'), self.dBn8)

self.Bn9 = QPushButton("9")
self.grid.addWidget(self.Bn9, 10, 4, 1, 1)
self.connect(self.Bn9, SIGNAL('clicked()'), self.dBn9)

# for j in range (0,10):
# self.B1 = QPushButton("Nro "+str(j))
# self.grid.addWidget(self.B1, j, 4, 1, 1)
# self.connect(self.B1, SIGNAL('clicked()'), self.dTodos)


self.BTodo = QPushButton("TODOS")
self.grid.addWidget(self.BTodo, 1, 5, 1, 1)
self.connect(self.BTodo, SIGNAL('clicked()'), self.dTodos)

self.BNada = QPushButton("NINGUNO")
self.grid.addWidget(self.BNada, 2, 5, 1, 1)
self.connect(self.BNada, SIGNAL('clicked()'), self.dNada)

quitbutton = QPushButton("SALIR")
self.grid.addWidget(quitbutton, 10, 5)
self.connect(quitbutton, SIGNAL('clicked()'), self, SLOT('close()'))



# 0
def dB1on(self) :
if self.status[0] == 0:
self.status[0] = 1
self.dSalida()
os.system("echo '1 on'")
else:
self.status[0] = 0
self.dSalida()
os.system("echo '1 off'")


def dB2on(self) :
if self.status[1] == 0:
self.status[1] = 1

self.dSalida()
os.system("echo '2 on'")
else:
self.status[1] = 0
self.dSalida()
os.system("echo '2 off'")

def dB3on(self) :
if self.status[2] == 0:
self.status[2] = 1
self.dSalida()
os.system("echo '3 on'")
else:
self.status[2] = 0
self.dSalida()
os.system("echo '3 off'")

def dB4on(self) :
if self.status[3] == 0:
self.status[3] = 1
self.dSalida()
os.system("echo '4 on'")
else:
self.status[3] = 0
self.dSalida()
os.system("echo '4 off'")

def dB5on(self) :
if self.status[4] == 0:
self.status[4] = 1
self.dSalida()
os.system("echo '5 on'")
else:
self.status[4] = 0
self.dSalida()
os.system("echo '5 off'")

def dB6on(self) :
if self.status[5] == 0:
self.status[5] = 1
self.dSalida()
os.system("echo '6 on'")
else:
self.status[5] = 0
self.dSalida()
os.system("echo '6 off'")

def dB7on(self) :
if self.status[6] == 0:
self.status[6] = 1
self.dSalida()
os.system("echo '7 on'")
else:
self.status[6] = 0
self.dSalida()
os.system("echo '7 off'")

def dB8on(self) :
if self.status[7] == 0:
self.status[7] = 1
self.dSalida()
os.system("echo '8 on'")
else:
self.status[7] = 0
self.dSalida()
os.system("echo '8 off'")



# Numeros uno a uno
def dBn0(self) :
self.status = [1, 1, 1, 0, 1, 1, 1, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 on' ")
os.system("echo '2 on' ")
os.system("echo '3 off' ")
os.system("echo '4 on' ")
os.system("echo '5 on' ")
os.system("echo '6 off' ")
os.system("echo '7 off' ")

def dBn1(self) :
self.status = [0, 0, 1, 0, 0, 1, 0, 0]
self.dSalida()
os.system("echo '0 off' ")
os.system("echo '1 off' ")
os.system("echo '2 on' ")
os.system("echo '3 off' ")
os.system("echo '4 off' ")
os.system("echo '5 on' ")
os.system("echo '6 off' ")
os.system("echo '7 off' ")

def dBn2(self) :
self.status = [1, 0, 1, 1, 1, 0, 1, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 off' ")
os.system("echo '2 on' ")
os.system("echo '3 on' ")
os.system("echo '4 on' ")
os.system("echo '5 off' ")
os.system("echo '6 on' ")
os.system("echo '7 off' ")

def dBn3(self) :
self.status = [1, 0, 1, 1, 0, 1, 1, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 off' ")
os.system("echo '2 on' ")
os.system("echo '3 on' ")
os.system("echo '4 off' ")
os.system("echo '5 on' ")
os.system("echo '6 on' ")
os.system("echo '7 off' ")

def dBn4(self) :
self.status = [0, 1, 1, 1, 0, 1, 0, 0]
self.dSalida()
os.system("echo '0 off' ")
os.system("echo '1 on' ")
os.system("echo '2 on' ")
os.system("echo '3 on' ")
os.system("echo '4 off' ")
os.system("echo '5 on' ")
os.system("echo '6 off' ")
os.system("echo '7 off' ")

def dBn5(self) :
self.status = [1, 1, 0, 1, 0, 1, 1, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 on' ")
os.system("echo '2 off' ")
os.system("echo '3 on' ")
os.system("echo '4 off' ")
os.system("echo '5 on' ")
os.system("echo '6 on' ")
os.system("echo '7 off' ")

def dBn6(self) :
self.status = [1, 1, 0, 1, 1, 1, 1, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 on' ")
os.system("echo '2 off' ")
os.system("echo '3 on' ")
os.system("echo '4 on' ")
os.system("echo '5 on' ")
os.system("echo '6 on' ")
os.system("echo '7 off' ")

def dBn7(self) :
self.status = [1, 0, 1, 0, 0, 1, 0, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 off' ")
os.system("echo '2 on' ")
os.system("echo '3 off' ")
os.system("echo '4 off' ")
os.system("echo '5 on' ")
os.system("echo '6 off' ")
os.system("echo '7 off' ")

def dBn8(self) :
self.status = [1, 1, 1, 1, 1, 1, 1, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 on' ")
os.system("echo '2 on' ")
os.system("echo '3 on' ")
os.system("echo '4 on' ")
os.system("echo '5 on' ")
os.system("echo '6 on' ")
os.system("echo '7 off'")

def dBn9(self) :
self.status = [1, 1, 1, 1, 0, 1, 1, 0]
self.dSalida()
os.system("echo '0 on' ")
os.system("echo '1 on' ")
os.system("echo '2 on' ")
os.system("echo '3 on' ")
os.system("echo '4 off'")
os.system("echo '5 on' ")
os.system("echo '6 on' ")
os.system("echo '7 off'")


def dTodos(self) :
for j in range (0,8):
if self.status[j] == 0:
self.status[j] = 1
os.system("echo " + str(j + 1) + " on")
self.dSalida()

def dNada(self) :
for j in range (0,8):
if self.status[j] == 1:
self.status[j] = 0
os.system("echo "+ str(j + 1) + " off")
self.dSalida()

def dSalida(self):
self.labelEstado.setText('%s' % self.status)
self.Textos = "echo `date` - "+ str(self.status) +" >> control.log"
os.system(self.Textos)


if __name__ == '__main__':

os.system("echo `date` 'Starting Control' >> control.log")
app = QApplication(sys.argv)
win = ControlWindow()
win.show()
app.exec_()
os.system("echo `date` 'Finishing Control' >> control.log")

#
# fin de codigo
#

jueves, 3 de octubre de 2013

Python control v1.0


El código del primero código en Python, como siempre "no soy de desarrollo" asi que el código es "muy dummy", los que sean expertos de Python pueden mejorarlo y mandarlo.
Lo mejoraré con gusto. En breve publicaré los demás APPs.

Si alguien quiere el código fuente me manda un email.


#!/usr/bin/python
#
# Control Simple encendido y apagado
# 8 x 3 ON OFF
#
# 2013-10 V 1
#

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
import subprocess
import os


class ControlWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.mainWidget = QWidget(self)
self.setCentralWidget(self.mainWidget)

self.grid = QGridLayout()
self.grid.columnCount = 10
self.grid.setSpacing(10)
self.mainWidget.setLayout(self.grid)

self.setWindowTitle('Control Central - Uno a Uno')

self.status = [0, 0, 0, 0, 0, 0, 0, 0]

self.font = QFont("", 0, QFont.Bold, False)
self.font.setPointSize(self.font.pointSize() * 2)

menubar = self.menuBar()
file = menubar.addMenu('&Acciones')

dealmenu = QAction('TODOS ON', self)
dealmenu.setShortcut('Ctrl+N')
dealmenu.setStatusTip('Todos los contactos ON')
self.connect(dealmenu, SIGNAL('triggered()'), self.dTodos)
file.addAction(dealmenu)

dealmenu = QAction('TODOS OFF', self)
dealmenu.setShortcut('Ctrl+F')
dealmenu.setStatusTip('Todos los contactos OFF')
self.connect(dealmenu, SIGNAL('triggered()'), self.dNada)
file.addAction(dealmenu)

exit = QAction('Exit', self)
exit.setShortcut('Ctrl+Q')
exit.setStatusTip('Exit application')
self.connect(exit, SIGNAL('triggered()'), SLOT('close()'))
file.addAction(exit)

self.labelEstado = QLabel('%s' % self.status)
self.grid.addWidget( self.labelEstado, 3, 4)
self.dSalida()

# for i in range (1,9):
# for j in range (1,3):
# self.BTodo1 = QPushButton("i")
# self.grid.addWidget(self.BTodo1, j, i, 1, 1)
# self.connect(self.BTodo1, SIGNAL('clicked()'), self.dTodos)

self.B1on = QPushButton("1 UP ")
self.grid.addWidget(self.B1on, 1, 1, 1, 1)
self.connect(self.B1on, SIGNAL('clicked()'), self.dB1on)

self.B1off = QPushButton("1 OFF")
self.grid.addWidget(self.B1off, 2, 1, 1, 1)
self.connect(self.B1off, SIGNAL('clicked()'), self.dB1off)

self.B2on = QPushButton("2 UP ")
self.grid.addWidget(self.B2on, 1, 2, 1, 1)
self.connect(self.B2on, SIGNAL('clicked()'), self.dB2on)

self.B2off = QPushButton("2 OFF")
self.grid.addWidget(self.B2off, 2, 2, 1, 1)
self.connect(self.B2off, SIGNAL('clicked()'), self.dB2off)

self.B3on = QPushButton("3 ON ")
self.grid.addWidget(self.B3on, 1, 3, 1, 1)
self.connect(self.B3on, SIGNAL('clicked()'), self.dB3on)

self.B3off = QPushButton("3 OFF")
self.grid.addWidget(self.B3off, 2, 3, 1, 1)
self.connect(self.B3off, SIGNAL('clicked()'), self.dB3off)

self.B4on = QPushButton("4 UP ")
self.grid.addWidget(self.B4on, 1, 4, 1, 1)
self.connect(self.B4on, SIGNAL('clicked()'), self.dB4on)

self.B4off = QPushButton("4 OFF")
self.grid.addWidget(self.B4off, 2, 4, 1, 1)
self.connect(self.B4off, SIGNAL('clicked()'), self.dB4off)

self.B5on = QPushButton("5 UP ")
self.grid.addWidget(self.B5on, 1, 5, 1, 1)
self.connect(self.B5on, SIGNAL('clicked()'), self.dB5on)

self.B5off = QPushButton("5 OFF")
self.grid.addWidget(self.B5off, 2, 5, 1, 1)
self.connect(self.B5off, SIGNAL('clicked()'), self.dB5off)

self.B6on = QPushButton("6 ON ")
self.grid.addWidget(self.B6on, 1, 6, 1, 1)
self.connect(self.B6on, SIGNAL('clicked()'), self.dB6on)

self.B6off = QPushButton("6 OFF")
self.grid.addWidget(self.B6off, 2, 6, 1, 1)
self.connect(self.B6off, SIGNAL('clicked()'), self.dB6off)

self.B7on = QPushButton("7 ON ")
self.grid.addWidget(self.B7on, 1, 7, 1, 1)
self.connect(self.B7on, SIGNAL('clicked()'), self.dB7on)

self.B7off = QPushButton("7 OFF")
self.grid.addWidget(self.B7off, 2, 7, 1, 1)
self.connect(self.B7off, SIGNAL('clicked()'), self.dB7off)

self.B8on = QPushButton("8 ON ")
self.grid.addWidget(self.B8on, 1, 8, 1, 1)
self.connect(self.B8on, SIGNAL('clicked()'), self.dB8on)

self.B8off = QPushButton("8 OFF")
self.grid.addWidget(self.B8off, 2, 8, 1, 1)
self.connect(self.B8off, SIGNAL('clicked()'), self.dB8off)

self.BTodo = QPushButton("TODOS")
self.grid.addWidget(self.BTodo, 3, 1, 1, 1)
self.connect(self.BTodo, SIGNAL('clicked()'), self.dTodos)

self.BNada = QPushButton("NINGUNO")
self.grid.addWidget(self.BNada, 3, 2, 1, 1)
self.connect(self.BNada, SIGNAL('clicked()'), self.dNada)

quitbutton = QPushButton("SALIR")
self.grid.addWidget(quitbutton, 3, 8)
self.connect(quitbutton, SIGNAL('clicked()'), self, SLOT('close()'))


# def lambda varx=1,vary=2: self.setear_bit(valor_de_posicion, valor_de_bit)


def dB1on(self) :
self.status[0] = 1
self.dSalida()
os.system("echo '1 on'")

def dB1off(self) :
self.status[0] = 0
self.dSalida()
os.system("echo '1 off'")

def dB2on(self) :
self.status[1] = 1
self.dSalida()
os.system("echo '2 on'")

def dB2off(self) :
self.status[1] = 0
self.dSalida()
os.system("echo '2 off'")

def dB3on(self) :
self.status[2] = 1
self.dSalida()
os.system("echo '3 on'")

def dB3off(self) :
self.status[2] = 0
self.dSalida()
os.system("echo '3 off'")

def dB4on(self) :
self.status[3] = 1
self.dSalida()
os.system("echo '4 on'")

def dB4off(self) :
self.status[3] = 0
self.dSalida()
os.system("echo '4 off'")

def dB5on(self) :
self.status[4] = 1
self.dSalida()
os.system("echo '5 on'")

def dB5off(self) :
self.status[4] = 0
self.dSalida()
os.system("echo '5 off'")

def dB6on(self) :
self.status[5] = 1
self.dSalida()
os.system("echo '6 on'")

def dB6off(self) :
self.status[5] = 0
self.dSalida()
os.system("echo '6 off'")

def dB7on(self) :
self.status[6] = 1
self.dSalida()
os.system("echo '7 on'")

def dB7off(self) :
self.status[6] = 0
self.dSalida()
os.system("echo '7 off'")

def dB8on(self) :
self.status[7] = 1
self.dSalida()
os.system("echo '8 on'")

def dB8off(self) :
self.status[7] = 0
self.dSalida()
os.system("echo '8 off'")

def dTodos(self) :
for j in range (0,8):
if self.status[j] == 0:
self.status[j] = 1
os.system("echo " + str(j + 1) + " on")
self.dSalida()

def dNada(self) :
for j in range (0,8):
if self.status[j] == 1:
self.status[j] = 0
os.system("echo "+ str(j + 1) + " off")
self.dSalida()

def dSalida(self):
self.labelEstado.setText('%s' % self.status)
self.Textos = "echo `date` - "+ str(self.status) +" >> control.log"
os.system(self.Textos)



if __name__ == '__main__':
os.system("echo `date` 'Starting Control' >> control.log")
app = QApplication(sys.argv)
win = ControlWindow()
win.show()
app.exec_()
os.system("echo `date` 'Finishing Control' >> control.log")

#
# fin de codigo
#

miércoles, 2 de octubre de 2013

Python + Hard


Como digo siempre "no soy de desarrollo", pero comenzaré a enterarme sobre Python para comentar la programación del controlador.

MANUAL THE ONE
El primer Link, Hello World.
Mas python
PySide
More simple samples.

La placa que conecta por USB un equipo con 8 relays, para controlar dispositivos.
Me pondré a jugar un poco con código.


martes, 1 de octubre de 2013

Futuro


Algo para jugar en el futuro.

24 SSD en RAID.








Poner 24 discos SSD en RAID, para lograr una tasa de 2gb/sec, lo que daría por tener un almacenamiento así en mis bases de datos...


PI, S.O. y sus usos.


En esta semana que pasó estuve pensando en el Hardware que uso a diario y los S.O. también estuve leyendo mucho sobre Raspberry PI y el Raspbian, un Debian preparado para ARM. Me dió curiosidad probar una PI.

Agui mis ideas, que no son la verdad del universo, solo ideas.

Creo que todos los que pueden estar leyendo esta página tenemos uno o mas equipos, equipos virtuales, teléfono/s, Netbook, tablets...
Aunque me parece barato comprar una PI (para abreviar), hay que comprar/conseguirse una fuente, cables, un monitor, teclado, mouse, Chip SD, accesorios para conectar otras cosas, es claramente un estimado, pero sumo alrededor de 150 U$S en "cosas" para poner a funcionar una PI. Si además queremos usarla con movilidad habrá que agregar unos dólares mas.


El tener que usar una SD es muy bueno, porque consume poco, es pequeña, simple y además no tiene partes móviles y soporta gólpes.

La PI admite varios S.O. aunque la página oficial recomienda claramente Debian.

La fuente de alimentación no es algo difícil de conseguir ni caro, pero si pensamos en la movilidad de la PI, es un problema, porque necesitaremos una fuente externa pequeña pero suficientemente grande para darle una autonomía interesante.
No tengo claro que velocidad da una SD, aunque quizas los últimos modelos sean los recomendables.

Como dice Diego, esto no es ni bueno ni malo, es así, una realidad.

El poder conectarle un video externo (Monitor) es muy bueno, pero claramente al querer usarla con movilidad requeriremos otro display mas chico o leds de colores o algo que sirva como "salida de imágenes", la idea de transportar un equipo que resuelva un problema en concreto pero no poder interactuar con él no me atrae. (necesito ver al menos unos leds...)

Creo que lo mas cercano para comparar [Peras con Peras], es compararlo con una netbook o con un teléfono, son cosas "parecidas", no dije igual.


PORQUE ES MEJOR UNA PI
Nos permite sentirnos "hackers" de verdad, como los de la época de los "Garage" donde teníamos que soldar chips para hacernos nuestros mandos para APPLE ][+, levanten la mano quienes se hayan tenido que armar los dos potes para controlar los jueguitos de Apple.
Creo que introduce la electrónica, informática, la programación, los prototipos a gente que no haya vivido la época de los 80-90 donde había que "tocar" cosas físicas en los equipos, creo que los últimos 10 años todo se transformó en "cambiar" o "uar/tirar/comprar".
Creo que incentivará a la programación con calidad, cada línea de C o Python o lo que uses en PI, requiere tipear, verificar, meter en la SD y ahi no sobran los Gigas como en otros hardwares (incluidos teléfonos) para meter bibliotecas, dlls, componentes en abundancia.
A nivel Desarrollo veo demasiado parecido el entorno de la PI, con un Debian en un equipo virtual.... usan el mismo S.O. y no hay claras diferencias, no he probalo las velocidades pero imagino que una PI tampoco es "mas rápida" que el peor portátil.... imagino.
Creo que la PI puede servir para algunos proyectos muy especiales, todavía no encuentro uno donde aplicarla, todavía.
Recomiendo leer la WIKI sobre la PI.


PORQUE ES MEJOR UN NETBOOK
El costo total de puesta en marcha, si lo comparo con un netbook de los baratos, lo que obtengo en una netbook es muchisimo mas, por el mismo precio (o casi).
En netbooks podemos instalar los S.O. que querramos, aún en los modelos mas limitados, podemos hacer correr un VMWare Player o similar, usan discos con mucha mas capacidad, un display incluido y su propia batería incluida.
Una PI tiene 256 o 512 de RAM, hoy en dia cualquier Netbook ya viene con 1 gb o mas. No es una diferencia increible pero al querer correr un entorno gráfico y un APP avanzado comienza al diferencia de performance.
Una PI requiere "algo" para poder emitir sonido, un ampli?
Diferencia de velocidad entre una SD y un Disco de netbook (no hablo de ponerle un SSD, que ya sería mayor aún).
Una ventaja es la medida de una PI, pero es también una limitación, requiere montarle una caja, soporte, fuente, memoria.... pienso que es una parte incompleta.
Creo que la PI puede servir para algunos proyectos muy especiales, todavía no encuentro uno donde aplicarla, todavía.

OTRA ALTERNATIVA
UN ANDROID MINI.

MI ELECCION
Hay un link muy bueno, donde explican como correr una "PI" sobre Windows o sobre Linux.
Por ahora prefiero guardarme los U$S 150 para comprar un netbook que pienso que me dará muchisima mas utilidad en mi "dia a dia" y seguir jugando con la PI pero virtualmente, hasta que encuentre un proyecto que justifique la compra y donde se pueda aplicar una PI, todavía hay muchos donde un teléfono o una netbook es la mejor alternativa.

He montado un Debian mínimo con LXDE para simular una PI, y tener un entorno igual para "jugar a programar", ocupa 2 gb de disco, 256 RAM, corre en VMWare Player en mi netbook (Asus eeepc) perfectamente y me siento como en los 80 con una Appli ][+, o una Corona, o un IBM PC1...

Iré haciendo "PInning" (el "hacer PI", palabra que se irá poniendo de moda), aunque sea sobre i386 y no sobre ARM.


GENTE, los que tengan una PI, pueden dejar sus comentarios? éxitos? utilidades para una PI? Cuanto les costó finalmente todo?

viernes, 27 de septiembre de 2013

Ubuntu accede a SQL Server.


Por diversas razones del trabajo, necesitamos conectar un equipo con Linux a Servidores SQL Server de 200 sitios distintos.
La secuencia que me funcionó.

Esto lo hice en Ubuntu, pero seguramente funcionará en Debians y similares.
Recomiendo ver la página UNIXODBC para mucha mas información.


# apt-get install unixodbc unixodbc-bin tdsodbc sqsh freetds-bin

# vi /etc/odbc.ini

[S31]
Driver = FreeTDS
Description = Servidor 31
Trace = No
Server = 10.10.10.31
port = 1433
Database = Master
# UID = sa -- esto no hace falta, se puede poner en el momento de la invocacion
# pwd = password -- esto no hace falta, se puede poner en el momento de la invocacion


# vi /etc/odbcinst.ini

[ODBC Drivers]
TDS = Installed

[FreeTDS]
# en mi caso las librerías estaban en ese sitio, verificarlo
Description = Free
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount = 1
CPTimeout =
CPReuse =
FileUsage = 1


# vi /etc/freetds/freetds.conf

[global]
# TDS protocol version
# tds version = 8
text size = 64512

# A typical Sybase server
#
#[egServer50]
# host = symachine.domain.com
# port = 5000
# tds version = 5.0

# A typical Microsoft server
[S31]
host = 10.10.10.31
port = 1433
tds version = 7.0



Luego para conectarse al servidor SQL Server, lo tradicional

# isql -v Mi_Servidor_SQL_Server qbr358 passbdpv

+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>



Lanzar querys pre-armadas con "<"

# isql WebDB MyID MyPWD -w < QUERY.sql El HELP Completo.

**********************************************
* unixODBC - isql *
**********************************************
* Syntax *
* *
* isql DSN [UID [PWD]] [options] *
* *
* Options *
* *
* -b batch.(no prompting etc) *
* -dx delimit columns with x *
* -x0xXX delimit columns with XX, where *
* x is in hex, ie 0x09 is tab *
* -w wrap results in an HTML table *
* -c column names on first row. *
* (only used when -d) *
* -mn limit column display width to n *
* -v verbose. *
* -lx set locale to x *
* -q wrap char fields in dquotes *
* -3 Use ODBC 3 calls *
* -n Use new line processing *
* --version version *
* *
* Commands *
* *
* help - list tables *
* help table - list columns in table *
* help help - list all help options *
* *
* Examples *
* *
* isql WebDB MyID MyPWD -w < My.sql *
* *
* Each line in My.sql must contain *
* exactly 1 SQL command except for the *
* last line which must be blank (unless *
* -n option specified). *
* *
* Please visit; *
* *
* http://www.unixodbc.org *
* pharvey@codebydesign.com *
* nick@easysoft.com *
**********************************************