0
Python para Maemo
       Osvaldo Santana Neto
       osantana@triveos.com


          Baseado nas apresentações de:
  Laur...
Instituto Nokia de Tecnologia

• Instituição 2002 fins lucrativos, fundada pela
  Nokia em
              sem

• Investiment...
Osvaldo Santana Neto
• Sócio fundador da Triveos Tecnologia Ltda.
• Trabalhou para as empresas: Conectiva
  (Mandriva), In...
Requisitos

• Conhecimentos em Python
• Conhecimentos em Linux
• VMWare
• Imagem Maemo SDK obtida em:
  http://maemovmware...
Desejável


• Conhecimentos de PyGTK
• Um Internet Tablet (N770, N800, N810)
Internet Tablets




Dispositivos portáteis voltados para uso da Internet.
Nokia N800
•   OMAP 2420

•   ARM11 330MHz

•   800x480x16

•   WLAN, Bluetooth, USB

•   Câmera VGA

•   2x cartões SD
Nokia N810
        •   OMAP 2420
        •   ARM11 400MHz
        •   800x480x16
        •   WLAN,
            Bluetooth, ...
• Plataforma desenvolvida pela Nokia para
  equipar a sua linha de Internet Tablets
• Baseada no Debian Linux
• Utiliza um...
Ambiente de
    Desenvolvimento
• Scratchbox
 • Ambiente para cross-compiling
 • SDK_X86 - arquitetura ‘host’
 • SDK_ARMEL...
Iniciando o ambiente
• Entrando no Scratchbox:
  • /scratchbox/login ou
• Iniciando os serviços:
  • af-sb-init.sh start
•...
A primeira impressão...
Python para Maemo
• Principal alternativa à linguagem C para
  desenvolvimento na plataforma
• Bastante difundida no mundo...
Projetos em Python
       Canola
Projetos em Python
       Carman
Bibliotecas Python
•   Gerais                  •   PIL

    •   PyGTK/Gobject       •   Gnome VFS/GConf

    •   D-BUS    ...
Easy
• Facilita ainda mais o desenvolvimento para
  Maemo
• Desenvolvido pela UFCG com apoio do
  INdT
• Incorpora a bibli...
Vamos começar...
Aplicação de exemplo
• Lista de tarefas
• Adicionar Tarefas
• Remover Tarefas
• Editar Tarefas
• Marcá-las como ‘prontas’
...
Lembretes importantes

• Use sempre:
 •python2.5
• O easy não vem instalado por padrão
 • Adicione...
   deb http://reposi...
Módulos &
      Armazenamento

#!/usr/bin/env python2.5

import shelve
from easy import ui

storage = shelve.open(quot;tas...
Definindo a Tabela

table = ui.Table(
      id=quot;todo_tablequot;,
      headers=(quot;Donequot;, quot;Descriptionquot;),...
Manipulando a tabela
def change_task(app, table, data):
  global storage

 key, task = data

 if task is None:
   del stor...
Tela principal
ui.App(
  id=quot;todo_appquot;,
  title=quot;To Do Listquot;,
  center=(table,),
  bottom=(
    ui.Button(...
Fechar a aplicação


 def exit(app, widget):
   storage.close()
   app.close()
Populando a tabela

def populate_table():
  global storage
  global table

 ks = int(k) for k in storage.keys()
 for k in ...
Rodando


if __name__ == quot;__main__quot;:
  populate_table()
  ui.run()
Hora de executar...

SDK_X86:~> run-standalone.sh python2.5 tasks.py
... e pronto.
Portando uma aplicação
A Aplicação




   Desktop
A Aplicação




Maemo sem adaptação...
Passo a passo do porte

• Substituir
  gtk.Window(gtk.WINDOW_TOPLEVEL) por
  hildon.Window()

• Fazer ‘reparent’ dos menus...
Substituindo a Window
@@ -26,6 +26,7 @@
 pygtk.require('2.0')
 import gtk
 import gtk.gdk
+import hildon
 import os
 impor...
Novos pais para o Menu

@@   -498,7 +498,10 @@
 
   
 self.refresh_recent_files_menu()
 

    self.window.add_accel_group(...
A barra de ferramentas

@@   -504,7 +504,7 @@
 
   
 self.window.set_menu(self.menu)
 
   
 self.set_slideshow_sensitiviti...
O diálogo correto
@@ -1353,7 +1353,7 @@
 
 
 
 self.save_image_now(self.currimg_name, gtk.gdk.pixuf_...

 
 def save_image...
Versão final
Distribuição
Pacotes Debian

  distutils



                    Progama &
                 Biblioteca Python
Ajustando os arquivos

setup.py
@@ -23,7 +23,7 @@
 
 
 ext_modules = [Extension('imgfuncs', ['imgfuncs.c'])],
 
 
 scripts...
Arquivo .desktop
mirage.desktop
@@ -1,10 +1,10 @@
 [Desktop Entry]
 Name=Mirage
 Comment=A fast GTK+ Image Viewer
-Exec=mi...
Mais Informações
• http://www.maemo.org
• http://pymaemo.garage.maemo.org
• http://easy.garage.maemo.org
• http://www.pygt...
Contatos
 e-mail: osantana@triveos.com
google talk: osantana@gmail.com
Upcoming SlideShare
Loading in...5
×

Python Para Maemo

1,280

Published on

Slides usados no treinamento de Python para Maemo ministrado pela Triveos Tecnologia Ltda (http://triveos.com) em parceria com o Instituto Nokia de Tecnologia (INdT)

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,280
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
46
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Python Para Maemo"

  1. 1. Python para Maemo Osvaldo Santana Neto osantana@triveos.com Baseado nas apresentações de: Lauro Moura <lauro.moura@openbossa.org> Raul Fernandes <raul@embedded.ufcg.edu.br>
  2. 2. Instituto Nokia de Tecnologia • Instituição 2002 fins lucrativos, fundada pela Nokia em sem • Investimentos da lei de informática • Escritórios em Manaus, Brasília e Recife • Pesquisa eEletrônicos, Software, Multimídia,e Produtos Desenvolvimento em Mecânica Telecomunicações e em Operações e Logística
  3. 3. Osvaldo Santana Neto • Sócio fundador da Triveos Tecnologia Ltda. • Trabalhou para as empresas: Conectiva (Mandriva), Instituto Nokia de Tecnologia, Objective Solutions, Haxent, ... • Responsável pela criação do projeto Python para Maemo no INdT em 2005 • http://www.pythonologia.org/
  4. 4. Requisitos • Conhecimentos em Python • Conhecimentos em Linux • VMWare • Imagem Maemo SDK obtida em: http://maemovmware.garage.maemo.org/
  5. 5. Desejável • Conhecimentos de PyGTK • Um Internet Tablet (N770, N800, N810)
  6. 6. Internet Tablets Dispositivos portáteis voltados para uso da Internet.
  7. 7. Nokia N800 • OMAP 2420 • ARM11 330MHz • 800x480x16 • WLAN, Bluetooth, USB • Câmera VGA • 2x cartões SD
  8. 8. Nokia N810 • OMAP 2420 • ARM11 400MHz • 800x480x16 • WLAN, Bluetooth, USB • Câmera VGA • 1x cartão miniSD • GPS • Teclado
  9. 9. • Plataforma desenvolvida pela Nokia para equipar a sua linha de Internet Tablets • Baseada no Debian Linux • Utiliza uma série de componentes conhecidos no universo do Software Livre
  10. 10. Ambiente de Desenvolvimento • Scratchbox • Ambiente para cross-compiling • SDK_X86 - arquitetura ‘host’ • SDK_ARMEL - arquitetura do dispositivo • Xephyr • Servidor X para emulação da interface gráfica
  11. 11. Iniciando o ambiente • Entrando no Scratchbox: • /scratchbox/login ou • Iniciando os serviços: • af-sb-init.sh start • Executando aplicações gráficas: • run-standalone.sh programa
  12. 12. A primeira impressão...
  13. 13. Python para Maemo • Principal alternativa à linguagem C para desenvolvimento na plataforma • Bastante difundida no mundo do Software Livre • Mantido pelo INdT de Recife • http://pymaemo.garage.maemo.org
  14. 14. Projetos em Python Canola
  15. 15. Projetos em Python Carman
  16. 16. Bibliotecas Python • Gerais • PIL • PyGTK/Gobject • Gnome VFS/GConf • D-BUS • Específicas Maemo • GStreamer • Hildon • Bluez • LibOSSO • Pyrex • OSSO-Addressbook
  17. 17. Easy • Facilita ainda mais o desenvolvimento para Maemo • Desenvolvido pela UFCG com apoio do INdT • Incorpora a biblioteca Eagle para desenho de Interfaces gráficas • http://easy.garage.maemo.org/
  18. 18. Vamos começar...
  19. 19. Aplicação de exemplo • Lista de tarefas • Adicionar Tarefas • Remover Tarefas • Editar Tarefas • Marcá-las como ‘prontas’ • Gravar as informações automaticamente
  20. 20. Lembretes importantes • Use sempre: •python2.5 • O easy não vem instalado por padrão • Adicione... deb http://repository.maemo.org/extras-devel diablo free non-free • ... no /etc/apt/sources.list • apt-get install easy
  21. 21. Módulos & Armazenamento #!/usr/bin/env python2.5 import shelve from easy import ui storage = shelve.open(quot;tasks.datquot;, 'c')
  22. 22. Definindo a Tabela table = ui.Table( id=quot;todo_tablequot;, headers=(quot;Donequot;, quot;Descriptionquot;), types=(bool, str), editable=True, data_changed_callback=change_task, )
  23. 23. Manipulando a tabela def change_task(app, table, data): global storage key, task = data if task is None: del storage[str(key)] else: storage[str(key)] = tuple(task) storage.sync()
  24. 24. Tela principal ui.App( id=quot;todo_appquot;, title=quot;To Do Listquot;, center=(table,), bottom=( ui.Button( id=quot;quit_buttonquot;, label=quot;_Quitquot;, expand_policy=ui.ExpandPolicy.All(), callback=exit)))
  25. 25. Fechar a aplicação def exit(app, widget): storage.close() app.close()
  26. 26. Populando a tabela def populate_table(): global storage global table ks = int(k) for k in storage.keys() for k in sorted(ks): table.append( storage[str(k)] )
  27. 27. Rodando if __name__ == quot;__main__quot;: populate_table() ui.run()
  28. 28. Hora de executar... SDK_X86:~> run-standalone.sh python2.5 tasks.py
  29. 29. ... e pronto.
  30. 30. Portando uma aplicação
  31. 31. A Aplicação Desktop
  32. 32. A Aplicação Maemo sem adaptação...
  33. 33. Passo a passo do porte • Substituir gtk.Window(gtk.WINDOW_TOPLEVEL) por hildon.Window() • Fazer ‘reparent’ dos menus e toolbars • Substituir diálogos GTK+ pelos do Hildon • Adaptações para espaço reduzido na tela
  34. 34. Substituindo a Window @@ -26,6 +26,7 @@ pygtk.require('2.0') import gtk import gtk.gdk +import hildon import os import sys, getopt import ConfigParser @@ -478,7 +479,7 @@ quot;quot;quot; # Create interface - self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window = hildon.Window() self.update_title() icon_path = self.find_path('mirage.png') try:
  35. 35. Novos pais para o Menu @@ -498,7 +498,10 @@ self.refresh_recent_files_menu() self.window.add_accel_group(self.UIManager.get_accel_group()) self.menubar = self.UIManager.get_widget('/MainMenu') - vbox.pack_start(self.menubar, False, False, 0) + self.menu = gtk.Menu() + for item in self.menubar: + item.reparent(self.menu) + self.window.set_menu(self.menu) self.set_slideshow_sensitivities() self.toolbar = self.UIManager.get_widget('/MainToolbar') vbox.pack_start(self.toolbar, False, False, 0)
  36. 36. A barra de ferramentas @@ -504,7 +504,7 @@ self.window.set_menu(self.menu) self.set_slideshow_sensitivities() self.toolbar = self.UIManager.get_widget('/MainToolbar') - vbox.pack_start(self.toolbar, False, False, 0) + self.window.add_toolbar(self.toolbar) self.layout = gtk.Layout() self.vscroll = gtk.VScrollbar(None) self.vscroll.set_adjustment(self.layout.get_vadjustment())
  37. 37. O diálogo correto @@ -1353,7 +1353,7 @@ self.save_image_now(self.currimg_name, gtk.gdk.pixuf_... def save_image_as(self, action): - dialog = gtk.FileChooserDialog(title=_(quot;Save Asquot;),action=gtk.FILE_CHOOSER_ACTION_SAVE,buttons=(gtk.STOCK_CANC EL,gtk.RESPONSE_CANCEL,gtk.STOCK_SAVE,gtk.RESPONSE_OK)) + dialog = hildon.FileChooserDialog(self.window,gtk.FILE_CHOOSER_ACTION_SAV E) dialog.set_default_response(gtk.RESPONSE_OK) filename = os.path.basename(self.currimg_name) filetype = None
  38. 38. Versão final
  39. 39. Distribuição Pacotes Debian distutils Progama & Biblioteca Python
  40. 40. Ajustando os arquivos setup.py @@ -23,7 +23,7 @@ ext_modules = [Extension('imgfuncs', ['imgfuncs.c'])], scripts = ['mirage'], data_files=[('share/mirage', ['README', 'COPYING',... - ('share/applications', ['mirage.desktop']), + ('share/applications/hildon', ['mirage.desktop']), ('share/pixmaps', ['mirage.png']), ('share/locale/ru/LC_MESSAGES', ['locale/ru/LC_M... ('share/locale/pl/LC_MESSAGES', ['locale/pl/LC_M...
  41. 41. Arquivo .desktop mirage.desktop @@ -1,10 +1,10 @@ [Desktop Entry] Name=Mirage Comment=A fast GTK+ Image Viewer -Exec=mirage %U +Exec=mirage Terminal=false Type=Application -Icon=mirage.png +Icon=mirage Categories=GTK;Application;Graphics; Version=0.8.3 Encoding=UTF-8
  42. 42. Mais Informações • http://www.maemo.org • http://pymaemo.garage.maemo.org • http://easy.garage.maemo.org • http://www.pygtk.org • http://code.google.com/p/eagle-py • http://openbossa.indt.org/canola • http://openbossa.indt.org/carman
  43. 43. Contatos e-mail: osantana@triveos.com google talk: osantana@gmail.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×