Programação e Linux.

quinta-feira, 21 de agosto de 2008

Slides palestra de 'Python no Celular' CeSOL

Ontem dia (20/08/2008) fiz minha palestra no CESOL, sobre python e Series 60, Mostrei como usar os recursos disponíveis no celulares Series 60 da Nokia usando Python como linguagem
No primeiro momento eu falei sobre python, nokia, symbian, a implemetação do python para o Series 60.

Após isto iniciei a parte dinâmica (slides 22 e 23) da palestra onde eu abria um console remoto (meu computador conectado no console python do celular) e fazia pequenos scripts para usar as funcionalidades do celular usando apenas python. O meu roteiro desta parte segue abaixo:
############################
# Abrir tres terminais
# Ligar o rfcomm
sdptool add --channel=2 SP
sudo rfcomm listen rfcomm2 2

####
# ir no celular e ativar o console bluetooth
#####
# Abrir o minicom em outro terminal

minicom
#######################
# no terceiro terminal
# procurar dispositivos

sudo hcitool scan

######################################
# DENTRO DO MINICOM
######################################
# PYTHON
# Coisas basicas
import os

# nome do os
os.name

# diretorio atual
os.getcwd()

os.listdir(u"e:\\")

# mostrar a hora atual
import time
time.ctime()


################################3
# SMS

# enviar um sms
import messaging
messaging.sms_send('08584166618', u'Somente um teste')

# receber um sms
import inbox
i = inbox.Inbox()

# receber sms
def my(msgid):
print msgid

i.bind(my)

########
# Aqui vai aparecer uma mensagem com o numero (copiar para abaixo)

# entao mostrar a mensagem
i.content(1049305)
i.address(1049305)
i.time(1049305)

# formatar para o tempo correto
from e32db import format_time
format_time(i.time(1049305))

#########
# Ligar para alguem

import telephone

telephone.dial('88752334')

telephone.hang_up()


#########################
# Agenda

import contacts

# mostrar contatos:
db = contacts.open()
for i in db:
print db[i].title

# adicionar um contato
c = db.add_contact()
c.add_field(u"first_name", value=u"CESOL")
c.add_field(u"last_name", value=u"UFC")
c.add_field(type=u"mobile_number", value=u"2008")
c.commit()

# Mostrar os contatos
for i in db:
print db[i].title

# Mostrar meu contato
c
c.id
db[c.id]

for e in c:
print e.type, e.value

# exportar um vcard
vcards = db.export_vcards([c.id])

# gravar o arquivo

filename = u"e:\\test.vcf"
f = open(filename, "w")
f.write(vcards)
f.close()


# PEDIR PARA LIGAR O BLUETOOTH
# enviar para alguem da plateia
# sudo hcitool scan

from e32socket import *
cel1 = "00:17:E3:F9:D6:D3"
#cel1 = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(cel1)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)


# apagar o contato
del db[c.id]
# Mostrar os contatos
for i in db:
print db[i].title

# reimportar o contato
db.import_vcards(vcards)

###########################
# Parte grafica (fazer um aplicativo)

# mexer no celular

# fazer um hello world

from appuifw import *

# desenhar o hello world
t = Text()
t.set(u"Hello python")
app.body = t

# como ninguem ta vendo, vamos tirar um screenshot da tela e enviar para alguem

import graphics

pc = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(pc)
image = graphics.screenshot()
filename =(u'e:\\pic001.jpg')
image.save(filename)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)

# enviar para eu mesmo
# ligar o bluetooth obex server

# fazer funcao para realizar screenshot e enviar para alguem
def ss(to='00:09:DD:50:0C:C5'):
phone = bt_obex_discover(to)
image = graphics.screenshot()
file =(u'e:\\pic001.jpg')
image.save(file)
bt_obex_send_file(phone[0], phone[1].values()[0], file)

#ss()

###
# Desenhar um retangulo

# mexer no celular

from random import randrange
app.body = canvas = Canvas()
color = randrange(0xffffff)
canvas.rectangle((0, 0, 100, 100), fill=color)

# enviar para eu mesmo
ss()

# desenhar uma seta de mouse
x,y = 20,20
arrow = [(0,0), (0,10), (2,8), (4,12), (6,11), (4,7), (7,7)]
canvas.polygon([(x+dx,y+dy) for dx,dy in arrow], 0, 0xffffff)

# enviar para mim mesmo
ss()

###################
# Camera
import camera
image = camera.take_photo()

# enviar para alguem
filename =(u'e:\\pic001.jpg')
image.save(filename)

cel1 = '00:17:E3:F9:D6:D3'
# cel1 = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(cel1)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)

# fazer um sistema de monitoramento?
# usar gprs/internet

#################
# Arquivo de audio?

import audio

filename = u"e:\\audio.wav"
s = audio.Sound.open(filename)

# gravar
s.record()

# parar
s.stop()

# tocar
s.play()

# fechar
s.close()

enviar para alguem
cel1 = '00:17:E3:F9:D6:D3'
# cel1 = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(cel1)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)

# apagar o arquivo
os.unlink(filename)

# Fazer um Servico jornalistico?

quarta-feira, 20 de agosto de 2008

Mouse bluetooth no linux

Eu não sabia que era tão fácil, mas no ubuntu para conectar um mouse bluetooth a ele basta abrir um terminal e digitar:

sudo hidd --connect <bd-addr>

O BD-ADDR pode ser obtido via comando:

sudo hcitool scan

Lógico que só foi isto porque o bluez já está configurado na minha máquina.

Mais informações podem ser obtidas em: http://gentoo-wiki.com/HOWTO_use_a_bluetooth_mouse
e
http://ubuntuforums.org/showthread.php?t=87919

quinta-feira, 14 de agosto de 2008

Redimensionando uma imagem do xen

É fácil redimensionar um disco usado pelo xen quando se usa LVM, agora se são arquivos de imagem (*.img)?

Pode-se fazer isto usando o dd.
Tenha certeza de que a imagem a ser redimensionada está fora de uso.

Vou mostrar como exemplo como aumentar uma partição ext3 em 15 GB:

dd if=/dev/zero bs=1M count=15000 >> /var/xen/fedora.img

Agora é só rodar o programa de redimensionar o sistema de arquivos.

ef2fsck -f /var/xen/fedora.img

resize2fs -f /var/xen/fedora.img


OBS: Use blocos de 1M (parâmetro bs=1M), você pode enfrentar problemas com valores muito altos
OBS2: Tenha certeza de que a imagem a ser redimensionada está fora de uso.