Vou-me embora para Pasárgada
Lá sou amigo do Reis
Novidades:
1 - Estou formado em Ciência da Computação pela UFPR .
2 - Estou deixando Curitiba . Após 22 anos na saudosa Curitiba estou deixando-a, e indo para Recife-PE .
Só tenho o que agradecer a esta magnÃfica cidade, à minha famÃlia que fica por aqui, e aos meus colegas da Mandriva , com os quais pude aprender bastante .
E esperar que este novo desafio seja tão bom e gratificante quanto o antigo .
Certa vez eu quis explicar a um amigo porque escrever código em python para celular era mais legal que escrever código em C (native-symbian e não OpenC ). Acho que hoje talvez eu consiga.
Segue os exemplos:
Python
print “Hello World”
C++-Epoc
// Hello World in C++, Epoc style (for Symbian OS)
#include < eikapp.h >
#include < eikdoc.h >
#include < eikappui.h >
class CHelloWorldAppUi;
class CEikApplication;
class CHelloWorldAppView;
class CHelloWorldApplication : public CEikApplication
{
public:
TUid AppDllUid() const;
protected:
CApaDocument* CreateDocumentL();
};
class CHelloWorldDocument : public CEikDocument
{
public:
static CHelloWorldDocument* NewL(CEikApplication& aApp);
static CHelloWorldDocument* NewLC(CEikApplication& aApp);
~CHelloWorldDocument(){};
public:
CEikAppUi* CreateAppUiL();
private:
void ConstructL() {};
CHelloWorldDocument(CEikApplication& aApp){};
};
class CHelloWorldAppUi : public CEikAppUi
{
public:
void ConstructL();
CHelloWorldAppUi(){};
~CHelloWorldAppUi(){};
};
static const TUid KUidHelloWorldApp = {0×10005B91};
GLDEF_C TInt E32Dll(TDllReason )
{
return KErrNone;
}
EXPORT_C CApaApplication* NewApplication()
{
return (new CHelloWorldApplication);
}
CApaDocument* CHelloWorldApplication::CreateDocumentL()
{
CApaDocument* document = CHelloWorldDocument::NewL(*this);
return document;
}
TUid CHelloWorldApplication::AppDllUid() const
{
return KUidHelloWorldApp;
}
CHelloWorldDocument* CHelloWorldDocument::NewL(CEikApplication& aApp)
{
CHelloWorldDocument* self = NewLC(aApp);
CleanupStack::Pop(self);
return self;
}
CHelloWorldDocument* CHelloWorldDocument::NewLC(CEikApplication& aApp)
{
CHelloWorldDocument* self = new (ELeave) CHelloWorldDocument(aApp);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CEikAppUi* CHelloWorldDocument::CreateAppUiL()
{
CEikAppUi* appUi = new (ELeave) CHelloWorldAppUi;
return appUi;
}
void CHelloWorldAppUi::ConstructL()
{
BaseConstructL();
_LIT(message,”Hello!”);
CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
informationNote->ExecuteLD(message);
}
fonte: http://www.roesler-ac.de/wolfram/hello.htm
Estou dando vida à minha primeira contribuição opensource ao projeto Maemo .
É o Pychord.
PyChord é uma aplicação que ajudará músicos durante ensaios mostrando cifras das músicas. A vantagem é que ele possui função de auto-scroll da tela, além de ter botões relativamente grandes.
Bastará ao usuário procurar pelo nome da música e o sistema mostrará a cifra. Como passei muito tempo brincando com a interface dele (fazer widgets no pygame parecia impossÃvel antes, além do scroll sensÃvel e com impulso), acabou não dando tempo de desenvolver a interface de busca por cifras. Mas estou pensando em usar o SQLite mesmo. De qualquer forma, além da search engine tem algumas features que pretendo desenvolver pra ele:
Troca de tom das músicas (muito útil pra caras como eu que custam para lembrar que a diferença entre B e C é de meio tom)
Rotação da tela.
De qualquer forma, tenho que agradecer ao Tony Maro que desenvolveu o teclado virtual e ao Marcelo ao dizer que não é bonito scroll-bars aonde não precisa. =)
O código não está aquela beleza, mas vai ter feriado por aà e eu vou ter bastante tempo livre para arrumar e terminar a aplicação.
Meu inglês não é lá essas coisas, mas fiz um vÃdeo de demonstração da aplicação que pode ser visto abaixo.
Com isto estou criando uma versão do meu blog na lÃngua da rainha : http://labs.danilocesar.com .
E para quem quiser ver o código do PyChord:
svn co http://labs.danilocesar.com/pychord/trunk
Aceito sugestões!
[]’s a todos e bom feriado!
Depois de um longo chá de aeroporto em Curitiba e Guarulhos, finalmente cheguei em Recife.
Como o vôo acabou chegando mais cedo, tive que ficar esperar o transfer por mais de uma hora no Aeroporto Internacional de Guararapes (Recife - Pe)
Por sinal, no aeroporto, conheci um funcionário do INdT (Rodrigo?), que me apresentou para a galera nas festas por lá.
Gostei bastante do povo que conheci.
Quanto às palestras, achei algumas muito interessantes, e outras nem tanto. Mas vamos por partes:
As que eu gostei foram
1 - PyS60
Participei da palestra do Jukka sobre o PyS60, mas infelizmente não pude ficar para o Hand’s On .
Conversando com o Jukka Laurila, percebi que o PyS60 está em pleno vapor.
Mas o que eu achei mais legal foi o que ele me contou no ônibus: A Nokia está pagando funcionários para desenvolver exclusivamente SoftwareLivre (no caso do Jukka com o Python).
E agora eu entendi e aceitei os motivos pelos quais eles abandonaram os Symbian 1st Edition.
2 - PyPy
Sempre achei idiota/inútil a idéia de manter um interpretador python escrito em python. Mas o Santagada me convenceu que não é bem assim. Além de otimizar a linguagem, ele comentou que seria possÃvel, com PyPy, escrever um interpretador javascript em python, e até converter (forçando um pouco a barra) código python em javascript. Isto sim é útil. Durante a festa da terça-feira, quando já estávamos “altos”, comentamos em fazer a mesma coisa com o projeto BrainFuck, em BrainFuck. Mas alguém já pensou nisto! =).
3 - GStreammer
O Wim mandou muito bem em sua palestra do Gstreammer. Deu pra ter uma noção geral do FrameWork e a que ponto anda o desenvolvimento. Gostei bastante.
Como nem tudo são flores…
OpenC
Fiquei decepcionado com a palestra e com o OpenC em si. Fiquei decepcionado com a API pois esta só irá rodar nos Symbian 3th Edition. É uma limitação muito forte. O OpenC no Brasil não terá efeito nenhum, pois o número de celulares assim no Brasil tende a zero. Mas de qualquer forma a idéia é boa e não tiro o mérito dela! Ter uma API POSIX para celulares é uma coisa muito boa.
Wireless
Como disse o Osvaldo , realmente o Wireless falhou em vários momentos. Foi uma pena. Aqueles que levaram seus notebook’s sentiram-se frustrados em alguns momentos.
Comigo mesmo
Fiz um “fuzuê” danado pra conseguir levar minha camera para Recife, mas apenas no aeroporto de São Paulo, chengando em casa, foi que percebi que não tinha tirado uma única foto… =(
Além das palestras, o evento contou com muita gente bacana. Além dos que eu citei no post anterior , finalmente conheci o Marcelo e o Lauro . Também conversei bastante com o Ulisses do BB BrasÃlia sobre a Mandriva Conectiva. Ele contou-me “causos” muito interessantes sobre ela.
Também vi o tal do OLPC . A idéia é muito boa! A criança que souber aproveitar poderá crescer bastante. Mas infelizmente vivemos em uma realidade aonde nem livro didático sobrevive por muito tempo. Logo eu tenho meus receios. O Marcelo citou uma frase muito interessante sobre o assunto: “Antes de inclusão Digital, precisamos de inclusão Social!” .
Bom, estão ai meus comentários atrasados sobre o Bossa. O Evento foi muito bom, em um lugar excelente . Fomos muito bem cuidados pelo INdT . Se houver próximas edições, recomendo ir.
Tive o prazer de ter em minhas mãos um Nokia 6681 a alguns dias atrás, e tive uma idéia:
Imagine uma touchscreen . Agora imagine uma touchscreen sem uma touch-screen =).
Imagine poder “simular” uma touchscreen no ar usando apenas a camera do seu celular.
Pode ser um brinquedo muito interessante não?
Pensando nisso fiz um pequeno aplicativo em Python (pyS60 ) que localiza um objeto e segue-o. Como se fosse um mouse pointer seguindo uma caneta.
Este aplicativo na verdade é apenas uma prova de conceito demonstrando que pode ser feito. Quando tivermos celulares melhores, algo como 1GHz (O 6681 possui um processador de 220Mhz), e cameras próprias para este tipo de aplicação, talvez tenhamos softwares e smartphones com este conceito em funcionamento.
Seria muito bacana ver soluções assim aplicadas em desktops 3D.
Segue um vÃdeo de demonstração do aplicativo. Como disse, é apenas uma prova de conceito. Python ainda não é uma linguagem muito rápida quando estamos em celulares. Mas é muito mais fácil programar e testar do que se fosse feito em native symbian , e ainda por cima posso programar em linux =).
Leitores de RSS podem ver o vÃdeo aqui
Código fonte
##############################################
# Produzido por Danilo Cesar [http://www.danilocesar.com]
# Inspirado por: http://www.bigbold.com/snippets/posts/show/636
# Agradecimento a Enrico Batista
##############################################
from appuifw import *
from graphics import Image
import camera, e32
#import miso # don’t dim the light
app.body = c = Canvas( )
running = 1
def quit( ) :
global running
running = 0
app.exit_key_handler =quit
app.title = u“O controle”
app.screen = ‘full’ # or ‘normal’, ‘large’
def getdata( im, bpp=24 ) :
import struct , zlib
im.save ( ‘D:\\ pixels.png’ , bpp=bpp, compression=‘no’ )
f = open ( ‘D:\\ pixels.png’ , ‘rb’ )
f.seek ( 8 +8 +13 +4 )
chunk = [ ]
while 1 :
n = struct .unpack ( ‘>L’ , f.read ( 4 ) ) [ 0 ]
if n==0 : break # ‘IEND’ chunk
f.read ( 4 ) # ‘IDAT’
chunk .append ( f.read ( n) )
f.read ( 4 ) # CRC
f.close ( )
return zlib .decompress ( ” .join ( chunk ) ) # ‘\x00′ prefix each line
X = 80
Y = 60
while running:
if X < 0 : X = 0
if Y< 0 : Y = 0
if X > 160 - 30 : X = 160 - 30
if Y > 120 - 30 : Y = 120 -30
im = camera.take_photo ( ‘RGB’ , ( 160 ,120 ) )
im.rectangle ( [ ( X,Y) ,( X+30 ,Y+30 ) ] , 0xff0000) # red outline
# check hot spot whether active
box = Image.new ( ( 30 ,30 ) , ‘L’ ) # gray scale
box.blit ( im, ( X,Y,X+30 ,Y+30 ) )
data = getdata( box, 8 )
# check black
for i in range ( len ( data) ) :
if ord ( data[ i] ) < 30 and ord ( data[ i] ) > 0 :
X += i%31 - 15
Y += int ( i/31 ) - 15
break
# Posso passar de 3 em 3 pixels. O código fica mais rápido e a perda
# de precisão é insignificante
i = i + 2
c.blit ( im, ( 0 ,0 ) , ( 8 ,12 ) ) # show camera
#miso.reset_inactivity_time()