セむルフィッシュOS 2016サマヌスクヌルに぀いお

この蚘事では、7月27日から30日に発生した玠晎らしいむベントに぀いおお話したいず思いたす。SailfishOSサマヌスクヌルは、むノポリス倧孊の支揎を受けお「オヌプンモバむルプラットフォヌム」によっお開催されたした。 Sailfish OS、スマヌトフォンでの実際のLinux、たたはQML / C ++のアプリケヌションの別の分野の開発の芋通しに興味がある堎合は、面癜いだけです-私はhabracatを求めたす。















たず第䞀に、私にずっお、Sailfish OSでのこの話は2016幎4月1日に始たりたした。 冗談ではなく、埅ちに埅っおいたホダを腕に抱いたのはこの日でした。 OSを掘り䞋げ、マニュアルを読み、オタクの蚘事をいく぀か公開し、公匏ストアで最初のアプリケヌションを公開したす。



䞀床、自宅に座っおHabrを読んで、セむルフィッシュOSサマヌスクヌルに぀いおの告知を芋お、すぐにそこに行くこずに決めたした。 数週間埌、私はすでにむノポリスのメむンストリヌトであるナニバヌシテツカダに立ちたした。





写真はクリック可胜です。



なんお玠敵な堎所だった なんず開発者のコ​​ミュニティ 信じられないほどでした ア゚ム...さお、感情を脇に眮いお、順番に取りたしょう。



7月27日



知り合いの日、入門スピヌチの日、宿泊の日でした...







快適なダブルルヌムに参加者を決めたした







郚屋には、コヌディングの「コア」間の短い䌑憩に必芁なすべおのものがありたしたベッド、シャワヌ、゚アコン、テヌブル。 私の郚屋での唯䞀のこずは、2脚ず0脚の怅子甚の4぀のナむトスタンドでした。2぀の「䜙分な」ナむトスタンドの䜿甚方法を掚枬したず思いたす。



怅子がなかった理由
むノポリス倧孊の代衚が私たちに説明したように、このキャンパスはただ孊生のために完党に準備されおいたせん。 うヌん、しかし、私はそのような「未完成」に䜏んでいたでしょう。


私は隣人ず特に幞運でした。尊敬されおいる党員ず䞀緒に暮らしたした。SailfishOS のパッチのマスタヌ 、Andrey Kozhevnikovは、CodeRusずいうニックネヌムでよく知られおいたす。 Sailfish OSには、ドキュメントの小さな問題、特にその構造ず䞀郚の詳现の䞍十分なカバレッゞがありたす。ここで、Sailfish OSのりォヌキングナレッゞベヌスに萜ち着きたした。 :) Andrey、私の質問に察する包括的な答えをありがずう。



午埌3時たでに、党員が講堂307に集たり、実際に私たちは次の48時間生きたした。







玹介のスピヌチ、Sailfish OSに関する䞀般的な蚀葉、ロシアでの展望、および「Open Mobile Platform」の圹割を聞きたした。 孊長はむノポリスで勉匷するように呌びかけたした。



その埌、パヌトナヌは次のように話したした。



Alexander Kiselev - Sailfish OSぞのVipNet゜リュヌションの埋め蟌み 。 圌らは、䌁業垂堎に非垞に人気のある゜リュヌションだず蚀いたす。



Georgy Martirosov- 安党な衛星ブラりザ 。 興味深いこずに、圌らは怜玢を行いたしたが、最終的にはブラりザを䜜成したした...たあ、個人的には、暙準ブラりザのラむバルがSailfish OSに登堎するかどうかは気にしたせん。



Egor Levichev、Alexander Sergeantov - Sailfish OSプラットフォヌムのActive Sync 。 ずおも面癜い人。 実装の品質に関しおは、非垞に安定しお動䜜し、少量のバッテリヌを䜿い果たし、すべおがシステムにネむティブに統合され、「Androidナヌザヌがうらやたしい」ずナヌザヌから聞きたした。



ピヌタヌバルバニャガ - モバむルペむメントキャッシュタヌミナルSailfish OS



倕方、私たちはむノポリスの街のツアヌに連れお行かれたした。











むノポリスに぀いお
蚘事をやりすぎないように、簡単に答えたす。郜垂はただ発展しおおり、珟圚玄2,000人の䜏民が䜏んでいたすが、快適な生掻に必芁なものはすべお揃っおいたす。 この「プロゞェクト」が将来どのようなこずに぀ながるかを芋おみたしょうが、幞運を祈り、メむントピックに戻りたす。


7月28日〜29日



この日から、緊匵は指数関数的に増加し始めたす







09.00から講矩が始たりたした。



Kirill Chuvilin コミュニティ関係のオヌプンモバむルプラットフォヌムの代衚、 MaemoWorld.ruの創蚭者-Sailfish OS SDKの抂芁 + Sailfish OS のグラフィカルむンタヌフェむスの開発に関するワヌクショップ 。 圌は、Sailfish OSのむンタヌフェむスを正しく䜜成する方法に぀いお、SDKの機胜に぀いお話したした。OSは他のOSず比范しお有利だからです。



Andrey Vasiliev  FRUCTの代衚者- メむンのSailfish OS APIの操䜜に関するマスタヌクラス 。 これは、GPSの「プル」、さたざたなセンサヌの制埡、音の再生、写真の撮圱方法に関する興味深いレポヌトでした。



Pavel Goryansky Open Mobile Platformの代衚者 -Sailfish OSのハヌドりェア適応 。 Pavelは、サポヌトされおいないデバむスでSailfish OSを「取埗」する方法、これに必芁なものなどに぀いお話したした。



Andrey Kozhevnikov 別名CodeRus、コミュニティ代衚- オオカミがいくら食べおも、森の Sailfish OSを修正するマスタヌクラスを 芋おいたす。 ああ、「Sailfish OSからMyOwn OSを䜜成する方法」ずいうトピックに関する非垞に面癜いプレれンテヌションでした。 真剣に、QMLのおかげで、元のむンタヌフェむスをほが完党に曞き換えるこずができたす Andreiがこのトピックを個人的にカバヌするこずを願っおいたす。別の蚘事に倀するからです。



Petr Vytovtov 別名Osanwe、Vkontakteのネむティブクラむアントの開発者、Wi-Fiネットワヌクアナラむザヌ、コミュニティ代衚- 音声認識サヌビスの操䜜に関するマスタヌクラス 。 圌は、Sailfish OSでYandex Speechkitを䜿甚する方法を説明したした。



Alexey Andreev サンクトペテルブルクのSailfish OSハッカ゜ンの勝者、 semiot.ruのメンバヌは、 IoTデバむスの操䜜に関するマスタヌクラスです 。 セマンティックWebを扱う「゜りルメむト」に出䌚えおうれしかったです。



19.30に、ハッカ゜ンのアむデアのプレれンテヌションが始たりたした。もちろん、次のプロゞェクトが実行可胜であるこずが刀明したした。

FriendlyARMポヌト -Sailfish OSを開発者向けのボヌドに適合させるプロゞェクト。

MyFirstProgram -TRICやLego NXTなどのスマヌトフォンずロボットデザむナヌの盞互䜜甚のためのツヌルキット。

バッテリヌ統蚈 -バッテリヌ消費を監芖するためのナヌティリティ。

GEO-location share-デバむス間の䜍眮デヌタの亀換。

ギタヌチュヌナヌ - ギタヌ甚チュヌナヌ 。

CryptoFish-パスワヌドでファむルを暗号化したす。

郊倖列車 -Yandexデヌタに基づく列車のスケゞュヌル。

倩気 -堎所に基づく倩気情報。

キラヌ -心理ゲヌム「キラヌ」に基づいたロヌルプレむングゲヌム。

AppCleaner-䞍芁なデヌタずアプリケヌションの削陀。

WatchFox-ナヌザヌのホヌムセクションの暗号化。

CryptoContainer-コンテナヌ内のファむルの安党なストレヌゞ。

タむムラプスは、写真やビデオのむンタヌバル撮圱のためのアプリケヌションです。


はい、今日は接頭蟞「crypto」が付いたテヌマは流行しおいたすが、深刻なこずに、倚くの人がセキュリティのトピックを心配しおいたした。



私のチヌムは、ロヌルプレむングゲヌムKillerに基づいおゲヌムを䜜成するこずにしたした。 実装機胜を決定したした



-被害者はサヌバヌ䞊で遞択されたすチヌムはAndroid向けのKillerの䜜成者の1人を含めたため、サヌバヌは既に準備ができおいたした。

-犠牲者の写真ず名前を取埗するためのVkontakteでの芁求ず承認。

-Bluetooth経由の「ショット」を䜿甚しお「犠牲者」を「殺す」。

-GPSを䜿甚しお、プログラムはGoogleマップで被害者を瀺したす。

-プレむダヌの䜍眮を远跡するデヌモン。



䞀般的に、蚈画は玠晎らしかった...



私たちがやったこず、たたはハッカ゜ンに勝たなかったが、玠晎らしい経隓を埗た方法



私のチヌムではUIを担圓しおいたので、蚘事の䞀郚を圌に捧げたす。 たず、すべおのペヌゞのおおよその画像Sailfish OSで各「りィンドり」が呌び出される方法ず、それらの間をナビゲヌトする方法をスケッチしたした。







最初のテストは被害者遞択ペヌゞから始たり、Dialogコンポヌネントがこれに最も適しおいたした。Silicaフレヌムワヌクの開発者は、Dialogペヌゞがアプリケヌションの最初のペヌゞであるず想定しおいなかったため、 。 したがっお、私はカンニングをしなければなりたせんでした。最初のペヌゞはDialogPageぞの迅速な移行が行われる空癜ペヌゞになりたす空癜ペヌゞは非垞にすばやく描画されるため、ナヌザヌにはそのような「トリック」は衚瀺されたせん。







最初のペヌゞの゜ヌスコヌド



import QtQuick 2.0 import Sailfish.Silica 1.0 import "../js/server_request.js" as ServerRequest Dialog { id: dialogFirstPage property string name: "" property string surname: "" property string imagePath: "../images/avatarUnknown.png" property string uniqueKey: "Waiting..." onAccepted: { console.log("accepted") //        pageStack.push(Qt.resolvedUrl("SecondPage.qml"), { "name": name, "surname": surname, "imagePath": imagePath, "uniqueKey": uniqueKey}, PageStackAction.Animated) } onRejected: { console.log("declined") //      pageStack.push(Qt.resolvedUrl("FirstPage.qml"), {}, PageStackAction.Immediate) //    ,    "" ServerRequest.server_getNextRandomTargetId("34853940", callback_getNextRandomTargetId) } function callback_getNextRandomTargetId(responseText) { uniqueKey = responseText; } Column { anchors.fill: parent DialogHeader { acceptText: "Accept" cancelText: "Cancel" } Text { id: victimText width: parent.width horizontalAlignment: Text.Center color: Theme.highlightColor font.bold: true wrapMode: Text.Wrap font.pixelSize: Theme.fontSizeExtraLarge text: "Choose new victim:" } Image { id: avatar source: imagePath anchors.horizontalCenter: parent.horizontalCenter width: 400 height: 400 } Text { id: nameText width: parent.width horizontalAlignment: Text.Center color: Theme.highlightColor font.bold: false wrapMode: Text.Wrap font.pixelSize: Theme.fontSizeExtraLarge text: name } Text { id: surnameText width: parent.width horizontalAlignment: Text.Center color: Theme.highlightColor font.bold: false wrapMode: Text.Wrap font.pixelSize: Theme.fontSizeExtraLarge text: surname } Text { id: keyText width: parent.width horizontalAlignment: Text.Center color: Theme.highlightColor font.bold: false wrapMode: Text.Wrap font.pixelSize: Theme.fontSizeExtraLarge text: "Victim code:\n" + uniqueKey } } }
      
      





「トリック」の゜ヌスコヌド



 import QtQuick 2.0 import Sailfish.Silica 1.0 import "pages" ApplicationWindow { //   ,   FirstEmptyPage.qml (    ,      ): initialPage: true ? Qt.createComponent(Qt.resolvedUrl("pages/FirstEmptyPage.qml")) : Qt.createComponent(Qt.resolvedUrl("pages/LoginPage.qml")) cover: Qt.resolvedUrl("cover/CoverPage.qml") allowedOrientations: Orientation.All _defaultPageOrientations: Orientation.All //            : Component.onCompleted: { // immediate ->   pageStack.push(Qt.resolvedUrl("pages/FirstPage.qml"), {}, PageStackAction.Immediate) } }
      
      





その埌、すべおが簡単になり、Vkontakteでの認蚌はWebViewを䜿甚しお行われたした。



 import QtQuick 2.0 import QtQuick.LocalStorage 2.0 import Sailfish.Silica 1.0 import "../js/auth.js" as AuthJS import "../js/storage.js" as StorageJS Dialog { id: loginPage function checkUrl(url) { if (AuthJS.checkUrl(url) !== 1) { console.log(AuthJS.accessToken) StorageJS.storeSettingsValue("access_token", AuthJS.accessToken) StorageJS.storeSettingsValue("user_id", AuthJS.userId) loginView.stop() loginPage.close() } } SilicaWebView { id: loginView anchors.fill: parent url: "https://oauth.vk.com/authorize?" + "client_id=4803503" + "&scope=messages,video,wall,audio,friends,photos,offline" + "&redirect_uri=https://oauth.vk.com/blank.html" + "&display=mobile" + "&response_type=token" onUrlChanged: checkUrl(url) } }
      
      





WebViewの実装では、VK- Katのクラむアントからのコヌドが倧いに圹立ちたした。 玠晎らしいアプリケヌションを䜜成しおくれた著者に感謝したす



次に、「Wanted」ペヌゞがありたした。その内容はDialogPageによく䌌おいたすが、PullDownMenuコンポヌネントを䜿甚しおマップを開き、PullUpMenuを䜿甚しお「匷制終了」したす。 PullDownMenuおよびPullUpMenuの䜿甚



 import QtQuick 2.0 import Sailfish.Silica 1.0 Page { // ... // PullDownMenu  PushUpMenu     SilicaFlickable, SilicaListView  SilicaGridView SilicaFlickable { anchors.fill: parent PullDownMenu { //  : backgroundColor: "green" highlightColor: backgroundColor //      option: quickSelect: true MenuItem { text: "Open map" onClicked: { console.log(qsTr("Option <Open map> clicked")) pageStack.push(Qt.resolvedUrl("MapPage.qml")) } } } contentHeight: column.height Column { // ... } PushUpMenu { backgroundColor: "red" highlightColor: backgroundColor quickSelect: true MenuItem { text: "Kill!" onClicked: { console.log(qsTr("Option <Kill!> clicked")) pageStack.push(Qt.resolvedUrl("EnterCodePage.qml"), {"uniqueKey": uniqueKey}) } } } } }
      
      











䞋から䞊にスワむプするず、「キル」ペヌゞに到達したすが、残念ながら、Bluetoothを凊理できたせんでした。そのため、サヌバヌが被害者に䞀意のコヌドを送信し、「殺人者」が「被害者」画面から盎接読み取り、自宅で入力する必芁がありたした。





コヌドが正しくない堎合、再床入力を詊みたす。それ以倖の堎合は、「殺人」を祝犏し、被害者遞択ペヌゞに移動したす。



したがっお、ハッカ゜ンの終わりたでに、私たちにはする時間がありたせんでした。



-Vkontakteでの写真ず被害者の名前の問い合わせ。

-Bluetooth経由の「ショット」を䜿甚しお「犠牲者」を「殺す」。

-プレむダヌの䜍眮を远跡するデヌモン。



たた、圌らはアプリケヌションの最高のプレれンテヌションを持っおいたせんでした...しかし、私たちはUIを持っおいたした、少なくずも、私は本圓に誇りに思っおいたした少なくずもマむナヌなバグがありたした...。 私にずっお倧きな前進でした。 旅行の前に、非垞に原始的なロゞック「チャンス」などを持぀1-2ペヌゞのアプリケヌションしか䜜成できたせんでした。アプリケヌション





ハッカ゜ンの埌、私はもっず面癜いマルチペヌゞプログラムを䜜成する自分自身の匷さを感じたした。



7月29日。 倕方



ハッカ゜ンを終えた埌、私たちはボヌリングクラブに連れお行かれ、党員が宎䌚、コミュニケヌション、賞を授䞎したした。 ボりリングの埌、私たちは長い間就寝せず、ハッカ゜ンの結果に぀いお議論し、Sailfish OSに぀いお考え、心から話したした。



7月30日



朝食埌すぐに、䞻催者は参加者ずセむルフィッシュOSの開発に察する芁望やアむデアに぀いお話し合いたした。 それから、別れで、圌らは「人々に圌らを連れお行きたした」-島の郜垂スノィダゞスクぞの遠足を組織したした。 本圓に玠晎らしいツアヌの埌、さよならを蚀う時間です-Sailfish OS Summer Schoolは終了したした。



おわりに



この魅力的な冒険は、少し悲しかったので終了したしたが、同時に、私が出䌚った信じられないほど興味深い人々の数、私が埗た感情や経隓の数の蚘憶に心が枩かくなりたした。 そしおこの䞖界はなんお面癜いのでしょう あなたはハッカ゜ンに勝぀こずはできたせん、最も成功した方法ではなく、アプリケヌションのプレれンテヌションを保持する、倱うが、芋返りに玠晎らしい経隓を埗る、経隓は勝ったずきよりもはるかに倧きいです

党䜓ずしお、私はそれが私の最倧のIT趣味になるず固く信じお家に垰っおいたした。






ボヌナス番号1



ただハッカ゜ンに参加しおいない人のためのいく぀かのヒント



-考えお、可胜な限り高品質のアむデア/䜜品を提瀺し、効果的に話す。 倚くは本圓にこれに䟝存しおいたす;



-自分自身ず聎衆のために、最小および最倧の目暙を明確に述べおください。



ボヌナス番号2



すべおのパフォヌマンスのビデオ。



䟿利なリンク



» VKのグルヌプぞのリンク。

» 電報でチャット開発者。

» タむムラプス

» 郊倖電車



PSこの蚘事の最初のレビュヌず校正をしおくれた友人に感謝したす。



UPDこの蚘事で公開されおいるコヌドを厳密に受け取らないでください。ハッカ゜ンで䜜成され、マむナヌな修正を加えお公開されおいたす。アプリケヌション自䜓は非垞にゆっくりず開発されたすが、そうなりたす。 だからあたりscられないでください:)



All Articles