DEBIAN PRO

DEBIAN PRO
DEBIAN

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?