domingo, 27 de maio de 2007

Game Jam Brasil

O Roberto Fagá fez um pequeno esboço de idéias para um Game Jam Brasil:
http://wiki.laptop.org/go/Game_Jam_Brazil

Obviamente ainda não está nada acertado se vai rolar ou não, por enquanto é só uma idéia que precisa de que pessoas se interessem e ajudem a fazer rolar mesmo. Um bom começo seria dando uma olhada no que tem nesse link e dando sugestões. Depois fazer as sugestões virarem realidade com apoio em infraestrutura, palestrantes, etc.

Outro link que queria deixar aqui é do SBIE 2007:
http://www.sbie.org.br/
O SBIE é o Simpósio Brasileiro de Informática na Educação e será realizado em São Paulo, de 28 a 30 de novembro, no Mackenzie. Está sendo organizado pelo LSI-USP e pelo Mackenzie.

A partir desses dois links me vem a cabeça: será que não rola de aproveitar o SBIE (e sua infraestrutura) para fazer um Game Jam Brasil? Acho que tem tudo a ver...

quinta-feira, 24 de maio de 2007

Editor Musical - SVN

Olá a todos!

Neste último mês eu e o Bruno Gola estivémos, entre outras coisas, escrevendo o Editor Musical em python.

O Bruno está cuidando da parte de áudio (CSound) e eu tenho escrito alguns módulos de Interface Gráfica.

Por enquanto, o som não roda em linux sem sugar porque o sugar tem alguns binds de CSound especiais. Se quiser ouvir alguma coisa, o recomendável é fazer testes no sugar.

O projeto (com o código) está em um repositório do google:
http://code.google.com/p/editor-musical/

Para baixar o código no seu computador, você precisa de algum cliente svn. Para linux, você pode instalar o subversion.
Em sistemas debian:
# sudo apt-get install subversion
ou
# sudo apt-get install svn

Com o cliente instalado, basta executar o comando:
# svn checkout http://editor-musical.googlecode.com/svn/trunk/ editor-musical

Assim, você baixará a versão em linux sem sugar e a versão para o sugar.

Para usar a versão em linux:
# cd editor-musical/linux/Musical\ Editor/
# python MusicalEditor.py

Para usar a versão em sugar, copie a pasta ' editor-musical/sugar/MusicalEditor.activity/ ' para a pasta do seu sistema emulado do XO ou do seu laptop XO: ' /usr/share/activities '
Reinicie o sugar (ctrl-alt-backspace) e um ícone será adicionado ao frame.

Ainda falta bastante coisa para fazer, mas já dá para ter uma boa idéia do que está acontecendo.
Semana que vem, se tudo der certo, o Editor Musical estará pronto.

Amanhã haverá reunião no NATE para discutirmos um possível módulo de comunicação para atividades compartilhadas.

Então é possível que logo o Editor Musical funcione em modo compartilhado (modo para o qual foi projetado).

segunda-feira, 21 de maio de 2007

OLPC no 60 minutes

Essa é uma reportagem que saiu em um programa chamado "60 minutes" da CBS:

http://video.google.com/videoplay?docid=-1049354722405908055&hl=en

Nela aparecem imagens da escola onde está rolando o projeto piloto em São Paulo. Também fala em "5 segundos" sobre o NATE e o trabalho desenvolvido aqui com os laptops (XO e Classmate).

sexta-feira, 18 de maio de 2007

Vários assuntos

Olá a todos os leitores do blog

É a minha 1ª postagem aqui no blog, quase ninguém deve saber quem eu sou, então vou fazer uma breve apresentação...
Sou a Nathalia, estou no 3º ano de engenharia de computação na Poli-USP e trabalho como estagiária no Nate (LSI).

Primeiramente, vou deixar aqui o link que o Alexandre passou. É uma crítica contra o projeto do OLPC de um professor do IME-USP. É bem extenso, mas vale a pena! Pelo menos para abrir a mente e ver o outro lado, os argumentos contra e tal. Ah, o link:
http://www.ime.usp.br/~vwsetzer/um-laptop-por-crianca.html

Outra coisinha para se pensar... Vai rolar um tal de Game Jam lá nos EUA, que é um evento voltado ao desenvolvimento de jogos para o XO. Olhem só:
http://hackronym.com/olpc/gamejam/
http://wiki.laptop.org/go/GameJam

Através de umas conversas iniciadas pela lista do OLPC-Brasil acabei conhecendo um tal de Roberto Fagá lá da USP-São Carlos e ele está com umas idéias bem legais. Ele entrou em contato com um pessoal de lá do Game Jam e parece que dá para rolar uns esquemas de algumas pessoas participarem aqui do Brasil usando uma web can. Tem mais alguém interessado??? Favor, manifestem-se...
Outra idéia dele foi de nós brasileiros organizarmos o mesmo evento aqui no Brasil... E ai o que acham???

Aproveitando para dar uma notícia para quem não acompanha muitos as listas de desenvolvimento de games: parece que tá quase certo que o Pygame (ahn? http://www.pygame.org ) vai ter uma versão para o XO mesmo. Já estam trabalhando nisso:
http://wiki.laptop.org/go/PyGame_Implementation

Acho que só isso por hoje!

terça-feira, 15 de maio de 2007

Como jogar Doom no XO

Olá novamente galera, tranqüilo?

Vendo informações ao redor do globo sobre XO me deparei com um video muito interessante, onde alguns desenvolvedores instalar DOOM num XO, pensando nisso procurei fazer o mesmo, e CLARO que não poderia guardar esta informação, portanto ai está um pequeno tutorial:

Introdução:

Inicialmente é importante deixar claro que o XO, a.k.a Laptop 100$, é um sistema embarcado que funciona com o SO Linux, mas especificamente uma distribuição baseada no Fedora. Portanto temos que abordar esta instalação como em um Linux, oque torna isto relativamente fácil.

1o Passo:

Como 1o passo podemos citar o ligamento do sistema, óbvio, e logo após isto iremos para a interface texto (terminal) do Sugar (SO do XO), para isto basta segurarmos ctrl+alt+F1 (você pode alternar entre a interface do Sugar pressionando ctrl+alt+F3).

Após isto será pedido o login, simplesmente digite “root”. Ao logar basta nos utilizar do commando “yum”, ou seja basta digitar “yum install prboom”. Prboom é um port do Doom feito para Linux, o qual contém até algumas modificações e melhorias da versão original, permitindo efeitos de trasnparencias, filtros e até o suporte ao OpenGL. Agora, levante vá tomar um café, dar uma volta com o cachorro, faça uns abdominais, ... pois este processo não será muito rápido.

2o Passo:

Já tomou seu café? Bem agora já estamos perto da reta final. Você precisará de um .wad, arquivos que contém os mapas do Doom, para poder jogar o jogo. Você pode fazer sua escolha: fazer o download da versão shareare do Doom OU simplesmente puxar o freedoom.wad.

Para uma rápida instalação basta dar um yum install freedoom, que o repositório também possui este arquivo.

3o Passo:

Agora um pequeno macete para poder rodar da melhor forma, possível. Execute o commando “init 3” para matar o Sugar; vá até a pasta /root/.prboom/ e edite o arquivo prboom.cfg (use algum editor como o vi ou o nano). Utilizaremos aqui o vi.

Abra o arquivo digitando “vi prboom.cfg”. Altera a linha de #Video Settings reentrando com os valores (para isto tecle “i”) 1200 para screen_width e 900 para screen_height ( a resolução nativa do XO é 1200X900). Agora tecle “Esc” para sair do modo de inserção e digite “:wq!” para escrever e sair sobreescrevendo.

4o Passo:

Você pode continuar a editar o que quiser dentro do .cfg, mas já podemos iniciar o jogo. Digite “prboom” e PRONTO!, vc pode agora jogar DOOM no seu XO!

terça-feira, 8 de maio de 2007

IRC Logger

Opa, e ai pessoal , está é minha primeira vez no blogger (e em qualquer blogger), e vou comentar um pouco sobre um logger que criei, em python, com ajuda do pessoal aqui do NATE para armazenar as mensagens do nosso canal no IRC (#olpc-brasil no channel FreeNode).
Bem inicialmente o Rafael Barbolo me passo um código com a base de como conectar num servidor IRC, que foi encontrado em:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/299411/index_txt

Entretando este criava um arquivo em modo texto (txt) que não é muito completo, claro. Então comecei a elaborar algumas modifições para que o arquivo salvo fosse em html.

Para isto simplesmente criei um cabeçalho, aonde é definido o nome da página ([head]), e aonde outras futuras informações podem ser alteradas (cor de fundo, imagem de fundo, e até mesmo o layout da página).

No corpo do texto ([body]), decidimos que seria muito interessante que cada usuario possuíse uma cor, para deixar mais claro quem falou. Para isso criamos um dicionário, que armazenaria uma cor, definida em uma tupla "circular", à um nick_name (apelido). Esta atribuição inicialmente era feita ao usuario efetuar o login no IRC, entretando limitava o código para que o logger SEMPRE fosse o primeiro usuário, senão o programa dava KeyError.
Isto foi facilmente resolvido com o uso da exceção KeyError (óbvio :D), onde seria mais interessante atribuir esta cor ao usuário apenas quando o mesmo enviasse mensagens e se já não houvesse Cor relacionada a este.
Também foi incluído o momento do envio da mensagens através da biblioteca time.

Após esta modificações restavam duas coisas: finalizar o código HTML ([/body][/html]) e enviar o arquivo para um servidor ftp.

Bem a parte de finalizar o código foi feita, inicialmente, através de uma exceção (ow coisinha util viu) KeyboardInterrupt, onde ao se finalizar o programa (com ctrl-C) este finalizaria o HTML terminando assim o log.

Já para enviar o arquivo utilizei como base um arquivo encontrado em:
http://snippets.dzone.com/posts/show/711

Assim ao se finalizar o programa o código era finalizado e já enviado ao servidor, porém achei mais interessante fazer estas duas ultimas ações como um outro processo, assim criei um arquivo send.py.

EDITED: Consegui automatizar a rotina de upload, melhorei o layout da pagina e as cores que são atribuidas aos usuarios, também implementei o replace para mudança dos > e < para não interpretar o html e não sumir os códigos que sejam semelhantes a HTML.

a seguir o código do ircLogger.py:




import socket, string, sys, ftplib, time, datetime, os

#some user data, change as per your taste
SERVER = 'irc.freenode.net'
PORT = 6667
NICKNAME = 'logging_bot'
CHANNEL = '#olpc-brasil'

#open a socket to handle the connection
IRC = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#open a connection with the server
def irc_conn():
IRC.connect((SERVER, PORT))

#simple function to send data through the socket
def send_data(command):
IRC.send(command + '\n')

#join the channel
def join(channel):
send_data("JOIN %s" % channel)

#send login data (customizable)
def login(nickname, username='user', password = None, realname='Logger do Canal', hostname='????', servername='Server'):
send_data("USER %s %s %s %s" % (username, hostname, servername, realname))
send_data("NICK " + nickname)

#for entering more colors to the program see http://www.w3schools.com/html/html_colornames.asp
color = ('#483D8B', '#FF0000', '#00AA00', '#0000FF', '#FFD700', '#A52A2A', '#FF00FF', '#A0A0A0', '#FF8C00')
i=0 #variable to count between colors
nameC={} #declares dictionary for Colors of Nicknames

irc_conn()
login(NICKNAME)
join(CHANNEL)

def makeHeader(): #make the HTML header
filehtml = open('msg.html', 'a+') #open afile to store the messages
filerd = open ('msg.html', 'rb')
if string.find(filerd.read(),'[html]')!=0: #verify if header is alread there
filehtml.write('[html]'+'\n'+ \
'[head] \n [meta http-equiv="Content-Type" content="text/html; charset=UTF-8"]' + '\n' + \
' [title]Log do IRC olpc-brasil[/title]' + '\n' + \
'[/head]' + '\n' + \
'[body bgcolor="#F5F5F5"]' + '\n' + \
'[p][h1] Log do IRC do dia ' + str(datetime.date.today()) +' [/h1][/p]\n' )

filehtml = open('msg.html', 'a+')
makeHeader()
recTime = time.time()

while True:
nowTime = time.strftime("[ %H:%M:%S ] ", time.localtime())

if time.time() >= recTime+60*60*24: #if has passed 24 hours than the last updat
#send routine then wait
date = str(datetime.date.today())+'.html'
print 'Connecting...'
s = ftplib.FTP('ftp.br.geocities.com','olpcbrasil','****') # Connect
filehtml = open('msg.html','a+') # file opened to finish html and to send
filehtml.write('[/body]' + '[/html]') #finish html on file
filehtml.flush()
print 'Uploading...'
fileSend = open ('msg.html' , 'rb')
s.storbinary('STOR %s' % date, fileSend) # Send the file
os.system("rm msg.html") #remove the previous log
filehtml = open('msg.html','a+') #start the new log
makeHeader();
print 'Operation Finished!'
recTime = time.time()
time.sleep(5)

try:
buffer = IRC.recv(1024)
except KeyboardInterrupt:#verify the end of file (ctrl-C)
filehtml.close()
#print 'Type "python send.py" to Upload this LOG to server'
print 'Program Terminated'
sys.exit(0)
msg = string.split(buffer)
print msg
if msg [1] == 'PRIVMSG':
print 1
nick_name = msg[0][:string.find(msg[0],"!")] #if a private message is sent to you catch it
message = ' '.join(msg[3:])
if nick_name != ':freenode-connect': #cancel first msg who comes from IRC
try:
nameC[nick_name]
except KeyError:
if i==9:
i=0
nameC[nick_name]=color[i]
i+=1
textMsg=string.lstrip(message, ':')
textMsg=string.lstrip(message, ':').replace('<','<').replace('>','>') #to not interp html texts
filehtml.write('[font color='+nameC[nick_name]+']' +nowTime\
+ string.lstrip(nick_name, ':')+ ' -> [/font]' + textMsg + '[br]' + '\n' )#write to the file
filehtml.flush() #don't wait for next message, write it now!

elif msg[1] == 'QUIT':
nick_name = msg[0][:string.find(msg[0],"!")]
message = ("saiu do canal")
filehtml.write('[font color="red"]' + nowTime + string.lstrip(nick_name, ':') + \
' -> ' + message + '[/font]' + '[br]' + '\n') #write to the file
filehtml.flush() #don't wait for next message, write it now!
try:
del nameC[nick_name]
except KeyError:
print 'User dont have color because he not send any msg'

elif msg[1] == 'JOIN':
nick_name = msg[0][:string.find(msg[0],"!")]
message = ("entrou no canal")
filehtml.write('[font color="green"]' + nowTime+ string.lstrip(nick_name, ':') + \
' -> ' + message + '[/font]' + '[br]' + '\n') #write to the file
filehtml.flush() #don't wait for next message, write it now!



Os códigos podem ser encontrados tbm em:
br.geocities.com/olpcbrasil/ircLogger.txt e
br.geocities.com/olpcbrasil/send.txt

OBS: As tags do HTML estão entre [] pois o blogger interpreta os comandos em <>

domingo, 6 de maio de 2007

Renderizando SVG

Saudações. Esse é meu primeiro post aqui, então uma pequena apresentação. Meu nome é Luiz Carlos Irber Júnior, estudante de Engenharia de Computação da UFSCar. Estou desenvolvendo, junto com o Fabio Navarro e o pessoal do LEC, o Comics (nome provisório, sugestões são bem vindas), um editor de HQ para o XO. Outra hora faço uma apresentação melhorzinha dele, agora quero postar um trecho de código que pode ser útil para vocês também.

Renderizando SVG no XO

O XO, como vocês sabem, possui restrições de espaço disponível para armazenar informação. Logo um dos pilares do Comics é que o máximo possível das imagens devam ser SVG, para poupar espaço (se puder ser SVGZ, melhor ainda). Mas isso leva a questão: como renderizar SVG no XO?
Obviamente o pessoal da OLPC já pensou nisso, e disponibiliza uma biblioteca chamada rsvg nos builds. Eis um pequeno exemplo de como usá-la:
#!/usr/bin/env python

import gtk
import rsvg
import cairo

class Main(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)

self.svg = rsvg.Handle('flag_brasil.svg')

draw_area = gtk.DrawingArea()
draw_area.connect('expose-event', self.expose_cb)

self.add(draw_area)
self.show_all()

def expose_cb(self, widget, event):
context = widget.window.cairo_create()
self.svg.render_cairo(context)

if __name__ == '__main__':
app = Main()
gtk.main()
Esse pequeno script em Python define uma classe chamada Main derivada de gtk.Window. Dentro desta janela da GTK é adicionada uma Drawing Area, mas poderia ser qualquer outro widget, inclusive um que você tenha definido. As partes realmente importantes são
self.svg = rsvg.Handle('flag_brasil.svg')
que cria um Handle (que contém outras funções bem interessantes, consultem a documentação para mais detalhes) para um arquivo SVG, e a função
def expose_cb(self, widget, event):
context = widget.window.cairo_create()
self.svg.render_cairo(context)
que fica responsável pela exibição da imagem. Essa função é executada a cada vez que o widget recebe um sinal de expose, ou seja, toda vez que ele tenha que ser desenhado na tela. Note que o atributo window de um widget só está disponível quando gtk.main() está rodando, assim não adianta tentar renderizar o SVG antes que o widget tenha seus recursos alocados no X. Um screenshot:

Lembrando que não é necessário se restringir a exibir a imagem, como eu fiz. Nessa função você pode utilizar outros comandos do Cairo para desenhar o que você quiser. Devo confessar que eu era um tanto preconceituoso com Cairo, mas funciona que é uma beleza depois que se pega o jeito. Se você ainda não pegou o jeito, esse tutorial pode ajudar bastante.

Happy Hacking!

sábado, 5 de maio de 2007

Atividades com som

Tenho pesquisado e brincado um pouco com atividades que usam som no laptop. Estou ajudando no Editor Musical e para a parte de som descobri o modulo csnd, um binding para o python utilizar o csound a partir da API original para C++.

Um exemplo bem básico e inútil de como usar:

import csnd

cs = csnd.Csound() # nova instancia do Csound
cs.Compile('teste.csd') # Compila arquivo .csd (opcoes+orquestra+score)

th = csnd.CsoundPerformanceThread(cs) # Inicializa uma thread executar para a partitura
th.Play() # toca
th.Join()

Arquivo teste.csd (Csound Orchestra e Score):

<csoundsynthesizer>
<csoptions>
-odac -d -+rtaudio=alsa
</csoptions>
<csinstruments>
; Inicializa as variáveis globais.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Instrumento #1.
instr 1
; Amplitude do sinal
kamp = 30000
; Frequência
kcps = 440
; Número da f-table.
ifn = 1
; Toca com amplitude 30000 e frequência de 440 Hz a onda do seno
; armazenada na tabela 1.
a1 oscil kamp, kcps, ifn

; Manda o som armazenado em a1 para a saida
out a1
endin
</csinstruments>
<csscore>
; Tabela #1: uma simples onda de seno usando GEN10.
f 1 0 16384 10 1
; nota de 1 segundo de duração
i 1 0 1
e
</csscore>
</csoundsynthesizer>

Ja consigo fazer sair som usando python, agora a briga é para me entender com os métodos de realtime da API do Csound pra inserir eventos de Score. Os métodos são InputMessage e ScoreEvent. Se alguem estiver mais avançado ou souber outros modos, compartilha ai com a gente :)

A documentação dessa API + python e principalmente a de som no XO/Sugar quase não existe então qualquer progresso vou atualizando aqui no Blog.

Referência da API (C++): http://csound.sourceforge.net/refman.pdf

Até mais.

sexta-feira, 4 de maio de 2007

Novos blogueiros

Quem visita o blog regularmente pôde perceber que o número de membros aumentou.
Temos agora a presença dos novos estagiários do LSI e de desenvolvedores voluntários do projeto.
Todos que desenvolvem ou pensam em desenvolver atividades para os XOs podem pedir uma conta enviando email para olpc@listas.softwarelivre.org

A idéia é que todos os desenvolvedores de aplicativos para os XOs possam postar e mostrar o que estão fazendo.

Participamos da lista
http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/olpc

E também usamos um canal de comunicação via irc, como já comentado aqui.

Sejam todos bem-vindos!