MAEMOトレーニング。 1日目

3月23日は、モスクワ州立大学の科学研究センターの建物で行われたMAEMOのトレーニングの初日でした。 モスクワのロモノソフ。
この日、次のトピックが検討されました。

まえがき


最初に、トレーニングの構成について説明します。
入り口では、伝統的に全員にバッジが与えられました。 また、必要なソフトウェア、ドキュメント、プレゼンテーションが入ったディスク。
コーヒーブレイクがありました。 インスタントコーヒー、最高の1つ。 また、お茶、ミネラルウォーター、伝統的なクッキー。
ランチはトレーニングプログラムには含まれていませんが、後でランチについて説明します。これは別の問題です。
トレーニングは、次のスキーム、最初の2つの導入トピック、GTK、Hildon、独立実行のタスク、HildonとMAEMOのいくつかの機能、そして再びタスクに従って行われました。


MAEMOの紹介。 デバイスとバージョンの概要。


最初のプレゼンテーションはレビューで、SPB SUAIのDmitry Malichenkoによって行われました


導入の重要な部分は、MAEMOアーキテクチャの説明でした。イメージで見ることができる主要なコンポーネントです。


N900アイアンの説明など、よく知られていることがさらに進んだため、原則として、導入ストーリーから伝えることはこれ以上ありません。

作業環境。 IDEの概要。


レポートは同じスピーカーによって作成されました。 また、私はこのプレゼンテーションを紹介的なものに帰しました。一般に、そのフレームワーク内で伝えられたすべては新しいものではありませんが、最も重要な点に焦点を当てます。

開発に必要なもの



エミュレーターの起動


scratchboxへのログインは、コマンド-scratchbox / loginで行います
スクラッチボックスのsb-menuスクリプトを使用して、アセンブリとエミュレーションの環境とプラットフォームを変更できます。
スクラッチボックスの外側にエミュレータのグラフィカル画面を表示するには、次のコマンドでXephyrを実行する必要があります。
$ Xephyr:2 -host-cursor -screen 800x480x16 -dpi 96 -ac&

MAEMO自体を起動するには、スクラッチボックスで次のコマンドを実行します。
エクスポートDISPLAY =:2
af-sb-init.sh start


スクラッチボックスコンソールからグラフィカルアプリケーションを実行するには、run-standalone.shスクリプトを使用します
起動したアプリケーションに必要な環境を追加します。

作業ツール


アプリケーション開発のために、最低限必要なもの:

このほとんどはすでにインストールされているはずですが、何かが足りない場合は、通常のaptを使用して自分でインストールできます。

IDE



私たちが今書くことを推奨する唯一のIDEは、EsBox-変更されたEclipseです。
esbox.garage.maemo.org/2nd_edition/index.html
「ネイティブ」Eclipseで統合を使用することもできます
wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Development_Environment/Maemo_Eclipse_Integration

これで、すべてのイントロが終了し、プログラミングが開始されました。

GTKの概要


このセクションは、GTKを毎日使用している人にとっては決して興味深いものではありません。もしあなたがその中の1人であれば、安全にスキップできます。
しかし、私にとって、Qt'shnikに関しては、これはまったく新しい情報でした。
レポートの作成者: Eugene Linsky、SPB SUAI


GTK +は、Cのグラフィカルオブジェクト指向ライブラリです。
純粋なCはクラスとオブジェクトをサポートしていないため、これにより開発スタイルに強い印象が残ります。
例:
C ++では、次のように記述します。
GtkButton *btn = new GtkButton(); btn->setLabel( "label" ); GtkWindow *w = (GtkWindow *) btn; * This source code was highlighted with Source Code Highlighter .
  1. GtkButton *btn = new GtkButton(); btn->setLabel( "label" ); GtkWindow *w = (GtkWindow *) btn; * This source code was highlighted with Source Code Highlighter .
  2. GtkButton *btn = new GtkButton(); btn->setLabel( "label" ); GtkWindow *w = (GtkWindow *) btn; * This source code was highlighted with Source Code Highlighter .
  3. GtkButton *btn = new GtkButton(); btn->setLabel( "label" ); GtkWindow *w = (GtkWindow *) btn; * This source code was highlighted with Source Code Highlighter .
GtkButton *btn = new GtkButton(); btn->setLabel( "label" ); GtkWindow *w = (GtkWindow *) btn; * This source code was highlighted with Source Code Highlighter .


Cでは、次のように記述する必要があります。
  1. GtkButton * btn = gtk_button_new();
  2. gtk_button_set_label(btn、 "label" );
  3. GtkWindow * w = GTK_WINDOW(btn);
*このソースコードは、 ソースコードハイライターで強調表示されました。


私の観点からは、これは気味が悪いですが、これについては、一般的には後でGTKを使用することの推奨事項についてです。

GTK構造


画像で見ることができるライブラリの主要コンポーネント


実用化


ウィジェットGTKのセットの基礎は、基本的なグラフィック要素GtkWidgetです。
すべてのグラフィック要素の基本クラス。そこからボタン、メニュー、ツールバーなどを継承します。

GTKはシグナル指向のライブラリです。つまり、特定のイベントが発生すると(たとえば、ボタンが押されると)、シグナルが発行されます。 開発者は信号を事前定義されたハンドラーに関連付けることができます。これは完了です
g_signal_connect()関数。

ウィンドウのみを表示し、「クロス」で閉じる単純なGTKプログラムの例
  1. #include <gtk / gtk.h>
  2. static void on_close(GtkWindow * window、gpointer user_data){
  3. gtk_main_quit();
  4. }
  5. int main( int argc、 char * argv []){
  6. GtkWidget *ウィンドウ;
  7. gtk_init(&argc、&argv);
  8. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  9. gtk_window_set_title(GTK_WINDOW(window)、 "simple" );
  10. gtk_widget_set_size_request(window、300、100);
  11. gtk_widget_show_all(ウィンドウ);
  12. g_signal_connect(window、 "destroy" 、G_CALLBACK(on_close)、NULL);
  13. gtk_main();
  14. 0を返します。
  15. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


最初に、GTK環境はgtk_init()関数で初期化されます。
その後、メインプログラムウィンドウが作成されます-gtk_window_new()
ウィンドウのサイズとそのタイトルが設定され、
次に、 gtk_widget_show_all()が呼び出され、メインウィンドウに自分自身とそのすべての子孫を描画するように指示します。
その後、終了ハンドラー( on_close() )がインストールされ、
メインアプリケーションループを開始するgtk_main()関数が実行されます。

その後、GTKコンテナーについて説明しました。コンテナーは、ウィジェットを配置できるウィジェットです
他のウィジェットについては、ここでは説明しません。興味のある方はGTKの紹介を読むことができます
それはすべて非常に簡単です。

プレゼンテーションの最後に、これでダウンロードできるアプリケーションのいくつかの例
リンク

ヒルドンの紹介


レポートはユージン・リニンスキーによって作成されました。
HildonはMAEMOのグラフィックライブラリです。 HildonはGTKのアドオンであり、
タッチ入力インターフェイスなど、モバイルデバイス固有の実装を追加します。

HildonはGTKインターフェイスを完全にコピーし、一部の機能を独自のものに置き換えています。
描画された要素を介した相互作用を許可します。
たとえば、MAEMOのメニューは、クリックするのに便利な大きなボタンのリストにすぎません。
メインツールバーは、MAEMOの慣例に従って下に移動します。 相対的に注意することが重要です
MAEMOのツールバー開発者は、次の推奨事項を提示します-本当に頻繁に使用されるもののみを含める
アプリケーション機能、すべての二次機能はメニューに表示する必要があります。

プレゼンテーションのこの部分の後、「対話」の時間であり、私たちは招待されました
Desktop-gtkアプリケーションを自分でMAEMO-Hildonに移植します。
GTKの例とレポートの作成者が提案した結果は、 ここからダウンロードして学習できます。

HildonのGTKとは異なり、キャンバスの再描画イベントはアプリケーションの起動時にのみ実行されますが、ウィンドウが最小化/最大化されている場合は発生しないことに注意することが重要です。

昼食


ほとんどの参加者がタスクを完了し、「報告会」が行われた後
昼休みが始まりました。 フードサービスを求めて、私たち(3人のグループ)は〜7 kmの道を歩きました。これは、モスクワ州立大学の周辺で誰がどこで食事をするかわからず、最初は間違った方向が選択されたためです。
続行するのに15分間遅れましたが、主催者も遅れており、明らかに同じ理由でした。
だから私たちは何も見逃しませんでした。

ヒルドンと協力してください。 ウィンドウのスタック。 HildonPannableArea(動的な指のスクロール)


ウィンドウのスタックは、戻るボタンで上から下に戻ることができる連続したウィンドウのチェーンを実装します。このアプローチは、モバイルアプリケーションに非常に便利です。
スタックウィンドウの作成は、 hildon_stackable_window_new()関数によって行われます。
そして、パラメーターを指定したgtk_widget_show_all()関数を使用して次のウィンドウに切り替える-次のウィンドウへのポインター。
アプリケーションに多数のウィンドウスタックを実装できます。

HildonPannableArea-画面サイズを超える子ウィジェットの数を含めることができるウィジェットコンテナー。
指で慣性スクロールを実装します。 ウィジェットは、 hildon_pannable_area_new()関数によって作成されます。

プレゼンテーションの後、インタラクティブが再び開始され、HildonPannableAreaとウィンドウのスタックを使用して例を実装するように求められました。
ただし、今日はすでにGTKを食べていて、MAEMOのQtでも同じことをしようとすることにしました
それをインストールして使用する方法は、 記事 tassを読んでください
予想どおり、Qtコードは行ごとにカウントすると2倍短くなり、行自体は2.5倍より短くなりました。 これは、何かがこれに適した道具にされるべきであることをもう一度証明します。 さらに、MAEMO 6(またはMeeGo)はグラフィックライブラリとしてQtに完全に切り替わります。
こちらのQtコードをご覧ください

ヒルドンと協力してください。 他に何が面白いですか。




便利なリンク


maemo.org/api_refs/5.0/5.0-final-MAEMOでの開発に必要なすべてのドキュメント。
fruct.org-トレーニングを実施した組織のサイト。
maemoworld.ruは、ロシアのMAEMOコミュニティのサイトです。

いくつかの写真


コーヒーブレーク中の視聴者:

主催者と講演者(SPB SUAI)

ScratchbboxエミュレーターでDesktop-GTKアプリケーションをMAEMO-Hildonに移植するタスクからのタスクアプリケーションのデモンストレーション

同じアプリケーションですが、既にデバイス上にあり、私が個人的に移植しました(写真では、私の手で:))


トレーニングの2日目については、 tassのユーザーが教えてくれます。

シムについては、私の休暇を取ってください、読んでくれてありがとう。

著者


ソロキン・ヴァシリー:@ VasiliySorokin
Kormalev Denis:@ BlackTass

Source: https://habr.com/ru/post/J89046/


All Articles