07 pys60 pim bluetooth v2

Upload: sweidan-omar

Post on 07-Apr-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    1/45

    Bevezets a mobilszoftverfejlesztsbe

    Dr. Forstner Bertalan

    [email protected]

    BME-AAIT 2008 1Bevezets a mobil szoftverfejlesztsbe 7. elads

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    2/45

    Az elz rsz tartalmblAdatkezels

    File objektum Perzisztens sztr: e32dbm

    e c s a a z s: eTelefon funkci

    zenetkezelsWebes tartalmak letltse: urllib

    Fejlettebb HTTP hasznlat: httplib BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 2

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    3/45

    Emlkeztek mg rMilyen osztllyal tudunk titkostott

    adatcsert vgezni HTTP protokollon?

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 3

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    4/45

    Emlkeztek mg rMilyen osztllyal tudunk titkostott

    adatcsert vgezni HTTP protokollon?

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 4

    A HTTPSConnection osztllyal.

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    5/45

    7. elads PyS60

    PIM funkcik elrse

    Bluetooth hasznlat

    Hzi feladat kiads

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 5

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    6/45

    Tartalom PIM funkcik elrse

    Calendar modul Contacts modul

    OBEX

    RFCOMM

    Rendszerinformcik elrse: sysinfo

    Helyfgg szolgltatsok

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 6

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    7/45

    A PIM funkcik elrseOkostelefonokon beptett szemlyes

    informci-kezel

    szoftverek PIM, Personal Information Management

    , ,

    Symbianos relcis adatbzisokban

    PyS60 kt modult ad hozz:

    calendar: naptr s teendk

    contacts: kontaktok

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 7

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    8/45

    Az e32calendar modulA naptr ltal is tmogatott 5-fle

    bejegyzshez Tallkoz (AppointmentEntry)

    vfordul (AnniversaryEntry)

    Tennival (TodoEntry)

    Emlkeztet (ReminderEntry)

    Mind az Entry osztlybl szrmazik

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 8

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    9/45

    A CalendarDB objektum Megnyits: a perzisztens sztrakhoz hasonl

    mdon

    Aktv naptr adatbzishoz paramter nlkl:calendar.open()

    Az idpontok Unix idk float tpus

    time.time()

    Formzsuk az e32db modullal

    format_time(unix_time)

    format_rawtime(symbian_time) BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 9

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    10/45

    Esemnyek lekrdezseentry_list = find_instances(start_datum, veg_datum, keresosztring =u

    [,appointments=0, events=0, anniversaries=0, todos=0,reminders=0])

    sztrak listival tr vissza

    kt eleme van: id, datetime Egy hnap, illetve nap esemnyeientry_list = monthly_instances(honap, appointments=0, events=0,

    anniversaries=0, todos=0, reminders=0)

    entry_list = daily_instances(nap, appointments=0, events=0,anniversaries=0, todos=0), reminders=0

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 10

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    11/45

    j elemek felvtele AppointmentEntry add_appointment()

    EventEntry add_event() AnniversaryEntry add_anniversary()

    _

    ReminderEntry add_reminder()

    Az j elemmel trnek vissza

    A felvtel automatikusan tranzakciban

    commit()

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 11

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    12/45

    Elemek elrse s trlsemycal = e32calendar.open()entry = mycal[id] #id-t korbban meghatroztuk

    del mycal[id] #Trljk az adatbzisbl

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 12

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    13/45

    Az Entry osztly 1 Elem szveges lersnak lekrdezse s

    mdostsa: content attribtum

    Helyszne: location attribtum

    Kezdeti s v id ont lekrdezs, me ads:

    start_time s end_time

    set_time(kezdeti_id, befejez_id)

    Riaszts Alarm

    None rtk: trls

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 13

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    14/45

    Az Entry osztly 2 Esemny priorits: priority

    0..255 elvileg

    1(fontos)..3 gyakorlatilag

    Elem azonostja: id

    o s m os s: as mo e

    Kihzott esemny: crossed_out (bool) Todo esetn cross_out_time is kell

    Szabvnyos versit vcalendar exportls Sztringbe az as_vcalendar() fggvnnyel

    CalendarDB-n

    export_vcalendars((int, )), import_vcalendars(string) BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 14

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    15/45

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    16/45

    Kulcs rtk Magyarzat

    type Az ismtlds tpust adja meg.daily Napi ismtlds.weekly A megadott napon hetente ismtldik (pl. minden htfn)

    monthly_by_dates Minden hnap azonos szm napjn (pl. minden h 5-n)ismtldik.

    monthly_by_days A hnap heteihez ktd ismtls, pldul minden hnapmsodik szerdja, negyedik cstrtke, stb.

    yearly_by_date Minden v adott napjn ismtldik (pl. minden februr 25-n)

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 16

    _ _ .

    minden vben mjus els vasrnapja)

    exceptions Unix idk listja Az ismtlds nem trtnik meg a listban megadott napokon.

    start Idpont Mikortl kezddik az ismtls sorozatend Idpont vagy None Meddig tartsanak az ismtldsek, illetve nylt vg

    ismtl

    dsi listainterval egsz Milyen gyakran ismtldjn az esemny. Csak mindenmegadott sorszm ismtlds teljesl, pldul napi ismtlss 2-es interval rtk mellett ktnaponta ismtld esemnytkapunk

    days 0-6 kztti egszek

    listja

    Explicit megadhatjuk, hogy a ht mely napjn trtnjen az

    ismtl

    ds (pl. [2,3] jelentse heti ismtl

    dsnl: mindenszerda s cstrtk).

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    17/45

    Ismtlds pldaismetles = {"type":"daily","exceptions":[start_nap+2*24*60*60], #kt nap mlva nincs esemny"start": start_nap"end":start_nap+14*24*60*60, #kt htig tart a sorozat"interval":2 #Minden msnap

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 17

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    18/45

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    19/45

    A kapcsolatok adatbzisa Korai mobil eszkzk: telefonknyv SIM krtyn

    Hordozhat

    Kevs nv, kevs adat, kevs bet

    contacts modul

    ContactDB osztly, perszisztens sztr-szerelrs

    Megnyits: mint calendar, default: open()

    Elemek indexe az egyedi azonostjuk (id)

    Az elemek Contact objektumok

    ContactField mez

    kkel BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 19

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    20/45

    Kontaktok hozzadsa, keresseadd_contact()

    j bejegyzs jn ltre, lockolva kapjuk visszaFind(keressztring) hvssal kereshetnk

    sszes elem kulcsa: keys() (lista)Trls: del

    Tmrts: compact()

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 20

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    21/45

    A mezk lehetsges tpusaiField_types(): sztrak listjval tr vissza

    storagetype A trolt adat tpusa. PyS60 alatt csak aszveges s dtum tpusok kezelhetek

    jelenleg.

    text, datetime, item_idvagy binary

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 21

    , , , ,

    stb.)

    . _

    location Hova tartozik a mez, pl. munkahelyi adatok,otthoni adatok, stb.

    home vagy workvagy none

    name Teljes (kirand) meznv Mobile (business)

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    22/45

    PyS60 alatt kezelhet meztpusoknote

    pager_number

    phone_numberpo_box

    postal_address

    ostal_code

    citycompany_name

    countrydatedtmf_stringemail_address

    _

    statestreet_address

    url

    video_number

    wvid

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 22

    exten e _a ress

    fax_numberfirst_name

    job_titlelast_name

    mobile_number

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    23/45

    TranzakciContact objektumon a mveletek mindig

    tranzakciban begin(), commit(), rollback()

    kzvetlenl krdezhet

    import contacts

    mycontacts = contacts.open()print str(mycontacts[mycontacts.keys()[0]].id) +":"+ \\mycontacts[mycontacts.keys()[0]].title

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 23

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    24/45

    Mezk kezelse vcard sztringknt lekrdezs: as_vcard()

    export_vcards, import_vcards mint naptrnl

    j mezk hozzadsa add_field(tpus, [rtk, label=cmke, location=location])

    Cmke = name, a megjelentett nv, automatikusan is generldik Mez trlse: az indexvel, mint egy listbl

    Mez keresse

    find(type[, location])

    Lockolt objektum szerkesztsekor ContactBusy

    kivtelt kapunk. BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 24

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    25/45

    Pldaimport contacts, appuifw, telephoneappuifw.app.title = u"Telef-o-nknyv"

    mycontacts = contacts.open()list = [] #A szrt lista a nevekkelfiltered = mycontacts.find(u"o")or person n ere :

    list.append(person.title)if list:index = appuifw.selection_list(list, search_field=1)phone_number = filtered[index].find('mobile_number') #mez vlasztsif phone_number:

    telephone.dial(phone_number[0].value) #tbb elem is lehetelse:

    appuifw.note(u"Nincs mobil szma a kontaktnak.", "error")else:appuifw.note(u"Nincsenek o-bets elemek a listban.", "error")

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 25

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    26/45

    Contact csoportokA contact bejegyzsek kztt

    ContactDb.groups() hvs visszaad egyGroups tpus objektumot

    add_group(csoport_neve)

    Az egyes csoportok: Group tpusobjektumok kpviselik csoport id-je s neve (name)

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 26

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    27/45

    Rvidtv rdis kommunikciFelhasznlk gyakran cserlnek adatot

    Bejegyzsek (naptr, kontakt) tkldse,kpek, hangok megosztsa a msik fllel

    Jtkprogram, kls GPS vev, headset, stb.

    Rgen: Infravrs

    Lass, fizikai rlts kell, megbzhatatlan

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 27

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    28/45

    Adatcsere Bluetooth segtsgvel Legelterjedtebb rvidtv rdis eszkz

    BT bekapcsoland a kszlken

    Eszkzk prostsa Opercis rendszer felletn

    PyS60 alatt a standard socket modul kiterjesztsekntmegvalstva

    Msik fl kivlasztsa: egyedi BT cme alapjn

    xx:xx:xx:xx:xx:xx (x: hexa szmjegy) Van olvashat nv is

    BT felleten klnfle szolgltatsok (service)

    Klnbz

    csatornn: nem zavarjk egymst. BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 28

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    29/45

    BT OBEX: adatcsere vezetk nlklFjl tkldse msik eszkzre (OBEX

    Push)

    A cleszkznek is tmogatnia kell az OBEXszolgltatst

    Eszkzk feldertse Oprendszer sajt dialgust dobjuk fel

    (address, service_szotar) = bt_obex_discover() Sztr kulcsai: sztenderdizlt service nevek rtkei: a hozzjuk rendelt csatorna szma

    (egsz rtkknt). BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 29

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    30/45

    Adatklds bt_obex_send_file(cm, csatorna, fjl)

    import btsocket, appuifw

    def sendfile():FILE = u"E:\\Python\\wood.jpg"try:address, services = btsocket.bt_obex_discover()

    appuifw.note(u"Nincs OBEX-et tmogat eszkz a krnyken.", "error")return

    if(u"OBEX Object Push") in services: #standard nvchannel = services[u"OBEX Object Push"]appuifw.note(u"Klds folyamatban.", "conf")btsocket.bt_obex_send_file(address, channel, FILE)appuifw.note(u"Elkldtem.", "conf")

    else:appuifw.note(u"Nem tmogatja az OBEX-et.", "error")return

    sendfile()

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 30

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    31/45

    Kommunikci BT socketenAz RFCOMM szolgltatssal socketen

    keresztl kommuniklhatunk kt kszlkkztt

    Mint TCP/IP alatt: e cs

    Szoksos mveletek: send, recv,

    Egyszerbb: fjlt ksztnk a socketbl

    Kommunikl felek: kliens, szerver

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 31

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    32/45

    Szerver oldali feladatok Standard socket ksztse, AF_BT

    Csatorna hozzrendels:

    bt_rfcomm_get_available_server_channel() Bejv krsek figyelse: listen()

    Szolgltats meghirdetse: bt_advertise_service(nv, socket, flag,osztly)

    Osztly: RFCOMM, illetve OBEX

    bt_obex_receive(socket, fjlnv)

    Socket biztonsgi belltsai: set_security(socket, zemmd)

    AUTH, AUTHOR, ENCRYPT

    Krsek fogadsa: accept()

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 32

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    33/45

    Plda: szavazgpdef do_server():client=btsocket.socket(btsocket.AF_BT, btsocket.SOCK_STREAM)channel=btsocket.bt_rfcomm_get_available_server_channel(client)client.bind(("", channel)) //BT eseten eleg a portot megadni

    client.listen(1)btsocket.bt_advertise_service(u"vote", client, True, RFCOMM)btsocket.set_security(client, btsocket.AUTHOR)appuifw.note(u"Vrakozom...", "conf")connection, address = client.accept()

    " "= . ,

    msg = u"Nem-mel fogsz valaszolni erre a kerdesre?\n"print >> f, msge32.ao_sleep(1)answer=f.readline()appuifw.note(unicode(answer), "info")e32.ao_sleep(1)client.close()

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 33

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    34/45

    Kliens oldali feladatokFelderts: mint OBEX esetn

    address, services = bt_discover()Csatlakozs: connect((cm, csatorna))

    A protokoll ne vigyen deadlock-ba

    Buffer betels vagy kirls esetn blokkol ahvs

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 34

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    35/45

    Plda: kliensdef do_client():server=btsocket.socket(AF_BT, SOCK_STREAM)

    address, services = btsocket.bt_discover()if "vote" in services:channel = services[u"vote"]

    . ,

    f=server.makefile("rw", 0)query = f.readline()if appuifw.query(unicode(query), "query"):print >> f, "Igen"

    else:print >> f, "Nem"e32.ao_sleep(2)

    else:appuifw.note(u"Nem tmogatja a szavaz szolgltatst.", "error")

    server.close() BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 35

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    36/45

    Informcik a rendszerrl: a sysinfo modulimei() A kszlk egyedi azonost szmt, az IMEI kdot adjavissza Unicode sztring formtumban. Kszlkazonostsnl, msolsvdelemnl lehet hasznunkra.

    active_profile() Az aktulisan kivlasztott profilt (csenghangok s hasonlbelltsok) adja vissza. Beptett rtkei: general, silent,meeting, outdoor, pager, offline, drive. A csendes(silent) profil esetn illik az alkalmazsnak is kikapcsolnia a

    ango at.

    ring_type() A csengets tpusa, ami lehet normal, ascending(nvekv), ring once (egyszer csenget), beep (csakspol), illetve silent (csendes)

    os_version() Az opercis rendszer verziszmt kaphatjuk meg

    sw_version() A futtat szoftver verzijt Unicode sztringknt adja vissza.Emultor esetn emulator az rtke.

    display_pixels(),display_twips()

    A kperny mrett adja vissza (szlessg, magassg)formban pixelben avagy twips-ben. (A twips a hvelyk

    1440-ed rsze). BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 36

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    37/45

    Sysinfo modul 2total_rom() A ROM memria mrete, bjtban.total_ram() A kszlk rhat memrijnak mrete, bjtban.

    free_ram() A szabad memria mrete, bjtban.max_ramdrive_size()

    A D: meghajt maximlis mrete, bjtban.

    free_drivespace() A httrtrakon elrhet szabad memria mrtktkaphatjuk meg egy sztrban, a kulcs a meghajt.

    battery() Az elem tltttsge 0-100 skln. Alacsony tltttsgesetn rdemes a munkkat perzisztens trra tenni,

    illetve a fogyasztst (hang, kommunikcis modulok)visszafogni.

    signal_bars() A trer erssge, 0-7 skln.

    signal_dbm() A trer dBm-ben.

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 37

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    38/45

    Tjkozds a fizikai trbenKi lehet hasznlni azt az informcit,

    amelyet a felhasznl fizikai helye jelent

    Pl. egy zletben termkinformcik, egytrtnelmi helysznen histria adatok, utazs

    alkalmval trkp stb.Pontos pozcionls: GPS-sel

    Kls

    : BT RFCOMM Bels: positioning modul

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 38

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    39/45

    Tjkozds cellainformcikkal A rdis hlzat tornyai lehetv teszik a mobil

    cellk azonostst

    nem tl pontos helyszn azonosts

    Location modul

    mcc, mnc, lac, cellid = gsm_location() Mobile Country Code

    Mobile Network Code

    Location Area Code s a Cell ID LAC pl. egy vrosi kerlet

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 39

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    40/45

    GPS alapon A positioningmodullal

    modules(): lekrdezi a rendelkezsre ll pozcionl

    eszkzket default_module(): alaprtelmezett modul azonostjt

    ve ez sz r a v sszaa o mo u o nyv ra nalistjt tartalmazza.

    [{'available': 0, 'id': 270526873, 'name': u'Bluetooth GPS'},

    {'available': 1, 'id': 270526858, 'name': u'Integrated GPS'},

    {'available': 1, 'id': 270559509, 'name': u'Network based'}]

    select_module(id)

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 40

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    41/45

    Requestor positioning.set_requestors([{"type":"service","format":"ap

    plication","data":"gps_app"}]

    A tpus lehet service, illetve contact. Els esetben a data paramternek tipikus

    rtke lthat fenn, contact esetn ide pl. a lekrdezst

    kezdemnyez telefonszmt lehet belltani

    A format megadja a data paramterformtumt

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 41

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    42/45

    Pozci krs position( course=0, satellites=0, callback=None, interval=

    POSITION_INTERVAL, partial=0 )

    stop_position() Callback event paramtere egy sztr

    position kulcs alatt latitude (szlessg), longitude (hosszsg),altitude (magassg), horizontal_accuracy,vertical_accuracy, stb.

    course kulcs alatt pl. speed

    Ha nem llnak rendelkezsre adatok: NaN

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 42

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    43/45

    sszefoglals PIM funkcik elrse

    e32calendar modul

    contacts modul

    OBEX

    RFCOMM

    Rendszerinformcik elrse: sysinfo Helyfgg szolgltatsok

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 43

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    44/45

    TesztMilyen paramterei vannak a calendar

    modul esemnyeire definiltismtldseknek?

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 44

  • 8/3/2019 07 PyS60 Pim Bluetooth v2

    45/45

    Hzi feladatDinamikus modul-betlts

    module = __import__(modulename) module.function()

    z r e n orm c A beadott hzit nem emultoron, hanem

    kszlken teszteljk.

    Ha nem fut rajta, -1 jegyrt jtszhatsz jra Py: Beadott keretrendszerben legyen ugrs a

    sajt mezre!

    BME-AAIT 2008 Bevezets a mobil szoftverfejlesztsbe 7. elads 45