Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Γιώργος Παναγιώτου Κούλα Χατζηκώστα Λευτέρης Ελευθεριάδης.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Γιώργος Παναγιώτου Κούλα Χατζηκώστα Λευτέρης Ελευθεριάδης."— Μεταγράφημα παρουσίασης:

1 Γιώργος Παναγιώτου Κούλα Χατζηκώστα Λευτέρης Ελευθεριάδης

2 Ιστορική Αναδρομή Νοέμβριος 2005 Ιανουάριος 2007 Νοέμβριος 2007
Nokia Ν700 Internet tablet Ιανουάριος 2007 Nokia N800 Skype, camera Νοέμβριος 2007 N810 Keyboard, Google talk Mozilla browser, GPS, touch screen Νοέμβριος 2009 N900 Cell phone, finger touch, multitasking, OpenGL Βασική εναλλακτική επιλογή η πλατφόρμα Android N900 Arm Cortex processor 600Mhz

3 Πλεονεκτήματα Ευνοεί την ανάπτυξη cross-platform παιχνιδιών(OpenGL ES) και εφαρμογών(Qt). Μπορεί να τρέξει εφαρμογές Linux. Υποστηρίζει Adobe Flash. Καλή επίδοση και προσαρμοστικότητα. B2: me elaxistes allages, kai ena aplo recompile (περιοριζόμαστε σε 256ΜΒ ram) B3: se anti8esi me to iphone Β4: se sugkrisi me to android, to linux pou trexei einai plires enw to android trexei kommatia linux

4 Μειονεκτήματα Ανάγκη για recompilation των εφαρμογών με κάθε νέα έκδοση. Ακριβή συσκευή ˆ€385) Υποστηρίζεται μόνο από την NOKIA Δεν υποστηρίζει επίσημα την Java Β2: android (€300) B3: 20 kataskeuastes uposthrizoun to android B4: To third party πακέτο Jalimo παρέχει την δυνατότητα

5 Εγκατάσταση Maemo Development on any Debian 32bit derivative (our case Ubuntu ) Installation scripts: add 'vm.vdso_enabled = 0’ to /etc/sysctl.conf $ sudo sysctl -p $ sudo bash maemo-scratchbox-install_5.sh (440MB) $ sudo bash maemo-scratchbox-install_5.sh –u username Relog on linux $/scratchbox/login [sbox-: ~] > logout $sudo python maemo-sdk-install-wizard_5.0.py (14 + ~230 MB)

6 Εγκατάσταση ESbox Eclipse IDE for maemo
Final Common Components (92 MB) Final Linux/GTK Support (2 MB) $sudo apt-get install sun-java6-jre $ bash esbox.sh Σε περίπτωση προβλήματος (κενό messagebox) $ sudo apt-get install xulrunner Extract in the same dir

7 Ανάπτυξη Εφαρμογών Scratchbox cross-compilation toolkit Μέσω:
Maemo 5 SDK Eclipse scratchbox IDE (ESbox) C, C++, Python QT toolkit QT creator $Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb &  $cp –a /projectfolder /scratchbox/users/$USER/$HOME $/scratchbox/login [sbox-FREMANTLE_X86: ~]> export DISPLAY=:2 [sbox-FREMANTLE_X86: ~]> af-sb-init.sh start [sbox-FREMANTLE_X86: ~]> cd /projectfolder [sbox-FREMANTLE_X86: ~]> qmake [sbox-FREMANTLE_X86: ~]> make [sbox-FREMANTLE_X86: ~]> run-standalone.sh ./targetexe

8 Qt creator IDE

9 Hello World #include <gtk/gtkmain.h>
#include <gtk/gtklabel.h> int main(int argc, char *argv[]) { /* Create needed variables */ HildonProgram *program; HildonWindow *window; /* Initialize the GTK. */ gtk_init(&argc, &argv); /* Create the Hildon program and setup the title */ program = HILDON_PROGRAM(hildon_program_get_instance()); g_set_application_name("HelloWorld"); /* Create HildonWindow and set it to HildonProgram */ window = HILDON_WINDOW(hildon_window_new()); hildon_program_add_window(program, window); /* Add example label to window */ gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(gtk_label_new("Hello World"))); /* Begin the main application */ gtk_widget_show_all(GTK_WIDGET(window)); /* Connect signal to X in the upper corner */ g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); return 0;

10 Compiling Hello world…
$Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb & $/scratchbox/login [sbox-FREMANTLE_X86: ~]> export DISPLAY=:2 [sbox-FREMANTLE_X86: ~]> af-sb-init.sh start [sbox-FREMANTLE_X86: ~]> gcc helloworld.c –o helloworld [sbox-FREMANTLE_X86: ~]> runstandalone.sh ./helloworld

11 Δυνατότητες Έχει τις δυνατότητες ενός Linux
Multimedia (video, audio, flash) User Interface (Hildon) Connectivity (Bluetooth, wifi, sockets, GPS) OpenGL ES (with hardware acceleration) File System, SQLite database Inter-process communication (DBUS)

12 SDK Libraries Toolkit APIs Gio Glib Gobject GTK+ ATK GDK GDK-pixbuf
dbus dbus-glib dbus-glib_2 gconf pango cairo clutter Multimedia APIs gstreamer gstreamer-libs gstreamer-plugins-0.10 pulseaudio gupnp gupnp-av libcanberra libmafw libspeex mafw-shared libsoup Connectivity APIs libconic libgwobex bluez osso-wlan icd2 fmtx-middleware Hildon APIs libhildon libhildondesktop libhildonfm libosso libnotify libtracker-common libtracker-module

13 GPS #include <location/location-gps-device.h> #include <location/location-gpsd-control.h> static void on_changed(LocationGPSDevice *device, gpointer data){ if (!device) return; if (device->fix && device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET) { g_debug("lat = %f, long = %f", device->fix->latitude, device->fix->longitude); location_gpsd_control_stop((LocationGPSDControl *) data); } static gboolean start_location(gpointer data){ location_gpsd_control_start((LocationGPSDControl *) data); return FALSE; int main(int argc, char *argv[]){ LocationGPSDControl *control; LocationGPSDevice *device; GMainLoop *loop; g_type_init(); loop = g_main_loop_new(NULL, FALSE); control = location_gpsd_control_get_default(); device = g_object_new(LOCATION_TYPE_GPS_DEVICE, NULL); g_object_set(G_OBJECT(control), "preferred-method", LOCATION_METHOD_USER_SELECTED, "preferred-interval", LOCATION_INTERVAL_DEFAULT, NULL); g_signal_connect(device, "changed", G_CALLBACK(on_changed), control); g_idle_add(start_location, control); g_main_loop_run(loop); g_object_unref(device); g_object_unref(control); return 0;

14 GUI-Color Chooser #include <hildon/hildon-color-chooser-dialog.h> #include <hildon/hildon-color-button.h> static GdkColor color = {0, 0, 0, 0}; GtkWidget *selector; gint result; selector = hildon_color_chooser_dialog_new(); /* Set the current selected color to selector */ hildon_color_chooser_dialog_set_color(HILDON_COLOR_CHOOSER_DIALOG(selector), &color); /* Show dialog */ result = gtk_dialog_run(GTK_DIALOG(selector)); /* Wait for user to select OK or Cancel */ switch (result) { case GTK_RESPONSE_OK: /* Get the current selected color from selector */ hildon_color_chooser_dialog_get_color (HILDON_COLOR_CHOOSER_DIALOG(selector), &color); /* Now the new color is in 'color' variable */ gtk_widget_destroy(selector); break; default: /* If dialog didn't return OK then it was canceled */

15 GUI-Color Chooser

16 Camera #define VIDEO_SRC "v4l2camsrc" #define VIDEO_SINK "xvimagesink“
/* Camera video stream comes from a Video4Linux driver */ camera_src = gst_element_factory_make(VIDEO_SRC, "camera_src"); /* Colorspace filter is needed to make sure that sinks understands * the stream coming from the camera */ csp_filter = gst_element_factory_make("ffmpegcolorspace", "csp_filter"); /* Tee that copies the stream to multiple outputs */ tee = gst_element_factory_make("tee", "tee"); /* Queue creates new thread for the stream */ screen_queue = gst_element_factory_make("queue", "screen_queue"); /* Sink that shows the image on screen. Xephyr doesn't support XVideo * extension, so it needs to use ximagesink, but the device uses xvimagesink */ screen_sink = gst_element_factory_make(VIDEO_SINK, "screen_sink"); /* Creates separate thread for the stream from which the image is captured */ image_queue = gst_element_factory_make("queue", "image_queue"); /* Filter to convert stream to use format that the gdkpixbuf library can use */ image_filter = gst_element_factory_make("ffmpegcolorspace", "image_filter"); /* A dummy sink for the image stream. Goes to bitheaven */ image_sink = gst_element_factory_make("fakesink", "image_sink"); 

17 Camera

18 Bluetooth #include <dbus/dbus-glib.h>
#define CONBTDIALOGS_DBUS_SERVICE "com.nokia.bt_ui" #define CONBTDIALOGS_DBUS_INTERFACE "com.nokia.bt_ui" #define CONBTDIALOGS_DBUS_PATH "/com/nokia/bt_ui" files[0] = "\data\pic001.jpg"; files[1] = NULL; appdata.dbus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); /* Create a proxy object for bt_ui service */ bt_ui = dbus_g_proxy_new_for_name( appdata->dbus, CONBTDIALOGS_DBUS_SERVICE, CONBTDIALOGS_DBUS_PATH, CONBTDIALOGS_DBUS_INTERFACE); /* Call show_send_file_dlg which shows a device selection * dialog to user and handles the sendling also */ call_result = dbus_g_proxy_call(bt_ui,"show_send_file_dlg“,&error, G_TYPE_STRV, files,G_TYPE_INVALID, G_TYPE_INVALID); g_object_unref(bt_ui); 

19 Touch screen/Drawing example
GdkPixmap *pixmap; int main(int argc, char** argv){ GtkWidget *drawing_area; //Create the drawing area widget drawing_area = gtk_drawing_area_new(); pixmap = gdk_pixmap_new(widget->window,800,480,-1); //Connect the events gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event", (GtkSignalFunc) button_press_event, appdata); //Set event mask for drawing_area gtk_widget_set_events (drawing_area, GDK_BUTTON_PRESS_MASK); } gboolean button_press_event( GtkWidget *widget, GdkEventButton *event, AppData *appdata){ if (event->button == 1 && pixmap != NULL){ char text[64]=""; //Draw rectangle on screen gdk_draw_rectangle(pixmap, widget->style->black_gc, 1, x-10, y-10,20,20); //Change the caption of the label to indicate touch co-ordinates sprintf(text, "You pressed point(%d,%d)", (int)event->x, (int)event->y); g_object_set(appdata->xyLabel, "label", text, NULL); return TRUE;

20 Touch screen/Drawing example

21 Αναζήτηση σε Βάση Συνταγών
Μας ζητήθηκε να αναπτύξουμε μια εφαρμογή για αναζήτηση κειμένου σε μια βάση δεδομένων μέσω γραφικής διαπροσωπίας. Στατιστικά: Χρόνος Ανάπτυξης: 2 ώρες Γραμμές κώδικα: 250

22 Αναζήτηση σε Βάση Συνταγών
//initialize forms s = new Search(); re = new Recipe(); //connect to database db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("recipe.sqlite"); if (!db.open()) { //on error, display message box QMessageBox msgBox; msgBox.setText("ERROR"); msgBox.setInformativeText("Something went wrong with the database connection."); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setIcon(QMessageBox::Critical); msgBox.exec(); } //show search form s->show();

23 Αναζήτηση σε Βάση Συνταγών
void Search::on_pushButton_clicked() { //when search button is clicked set a query according to the user’s input model->setQuery("SELECT ID, RecipeName, Description FROM recipe WHERE RecipeName LIKE \"%" + ui->lineEdit->text() + "%\""); //display query results ui->tableView->setModel(model); ui->tableView->show(); ui->tableView->setColumnHidden(0,true); ui->tableView->setColumnWidth(1,290); ui->tableView->setColumnWidth(2,430); } void Search::on_tableView_doubleClicked(QModelIndex index) //when double click on table, display recipe form re->displayRecipe(model->record(index.row()).field(0).value().toString()); this->hide();

24 Αναζήτηση σε Βάση Συνταγών
void Recipe::displayRecipe(QString index) { QSqlRecord r; ui->textEdit->clear(); //set a query according to the index given as input,to get the information of the //recipe querymodel->setQuery("Select * from Recipe where ID=\"" + index + "\";"); r = querymodel->record(0); //display recipe information ui->textEdit->append("<div align=\"center\"><u>" + r.field(1).value().toString() + ((r.field(64).value().toString().isEmpty())?"":" (" + r.field(64).value().toString()+")") + "</u></div><BR><b>Equipment:</b>"); ………… }

25 Αναζήτηση σε Βάση Συνταγών

26 Συμπεράσματα Απαραίτητη η συσκευή για πολλές εφαρμογές
Εύκολη και γρήγορη ανάπτυξη εφαρμογών μέσω Qt Έλλειψη βιβλιοθηκών (πχ database connectors) Καλό community support Καλό documentation από πλευράς Qt, μέτριο από πλευράς Maemo SDK B3) sql lite

27 Βιβλιογραφία http://gdgt.com/discuss/maemo-vs-android-what-makes-3nu/

28 ΤΕΛΟΣ ΠΑΡΟΥΣΙΑΣΗΣ


Κατέβασμα ppt "Γιώργος Παναγιώτου Κούλα Χατζηκώστα Λευτέρης Ελευθεριάδης."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google