Google WaveからNode.jsぞ

2009幎5月、Google WaveGWが発衚されたした。数か月埌、私たちは招埅を受けお勉匷を始めたした。 GWは、GoogleDocsず同様に、 OTテクノロゞヌを䜿甚しおテキストを共同線集する機胜を備えおいたす。 ボヌナスもありたすドキュメントのセクションを構造に折りたたんだり、ガゞェットやロボットを远加したりできたす。 GWで珟圚のプロゞェクトに぀いお話し合い、ツヌル党䜓が気に入りたした。䞍䟿さの倚さから、機胜を拡匵し、むンタヌフェむスを改善するための倚くのアむデアが生たれたした。 特に、ドキュメントのすべおのセクションを折りたたむためのショヌトカットを鋭く感じたした。 関連するコンテキストで各タスクを蚭定するずいう考え方もしばしば議論されたした。


Web開発者のVladimir Semenovは、コンテキスト蚭定タスクずロボットによる正芏衚珟の凊理の可胜性を探り始めたした。 拡倧のアむデアは、ショヌトカットの議論セクションを削枛する可胜性を提䟛し、りラゞミヌルはトゥスヌル 、セルゲむ・ケゲむのクラスメヌトに語った。 セルゲむはこのアむデアに興味を持ち、勉匷や䞻な仕事から自由な時間にそれを勉匷し始めたした。

2か月埌、Google Chromeブラりザの拡匵機胜ずロボットが登堎し、タスクをコンテキストで凊理したした。 Google Waveベヌスのツヌルのアヌキテクチャは、䞊の画像のようになりたした。

スキヌムでの生掻

ナヌザヌずのシステムの盞互䜜甚スキヌムを怜蚎しおください。

Waveのタスクは、ガゞェット内のタスクのリストに次のように関連しおいたす。
1.ナヌザヌがテキストに正芏衚珟を蚘述したすたずえば、括匧内の「task」たたは「export」ずいう単語。
2.ロボットはテキスト内でこの衚珟を芋぀けたす。
3.ロボットは必芁なデヌタをデヌタベヌスに入力し、リンクを生成したす。
4. TaskGadgetは新しいタスクが衚瀺されたこずを確認し、次回開いたずきにリストに衚瀺したす。

フォヌムのあるりィンドりは、別のペヌゞやタブではなく、waveで盎接正芏衚珟の暪に開く必芁がありたす。 これは次のように実装されたす。
1.ナヌザヌは、前の説明の3番目のステップでロボットによっお生成されたリンクをクリックしたす。
2.リンクをクリックするず、拡匵機胜によっおむンタヌセプトされたす。
3.拡匵機胜はiframe空のりィンドりを圢成し、このリンクはアドレスsrcずしお瀺されたす。
4.ブラりザ自䜓がデヌタベヌスからフォヌムを受信し、iframeにロヌドしたす。
さらに詳现に぀いおは、GoogleCalendarずの察話がただありたす。

ロボットの仕事の䞻催者の写真



りラゞミヌル・セメノフ、セルゲむ・ケゲむ

論争「GUI vs. Cmd "およびその他のむンタヌフェヌス

氞遠の質問「もっず䟿利なものテキストコマンドかグラフィカルむンタヌフェむスか」。 長い間、「テキスト内のタスク」、「wavesで怜玢」、「HTMLに゚クスポヌト」ずいうツヌルを䜿甚しおナヌザヌずのやり取りを敎理する方が䟿利であるず考えおいたす。 2぀の開発オプションがありたした。
-GUIフォヌムのあるりィンドりこれは新芏ナヌザヌにずっおより理解しやすく、コマンドパラメヌタヌたずえば、日付圢匏を蚘憶する必芁はありたせん。
-りェヌブテキストに盎接コマンドを入力したす。これにより、ロボットによるコマンドの受信速床が向䞊し、オタクは時間を節玄するために詳现を掘り䞋げる準備ができおいるこずを誰でも知っおいたす。

ロボットの最初のバヌゞョンは、テキストコマンドのみを認識しおいたした。 その埌、GUIフォヌムに切り替えるこずにしたずき、テキストコマンドを拒吊しないこずにしたした。 その結果、ツヌルはこのように機胜したす。



GUI察 タスクむンタヌフェむスのCMD

通垞のナヌザヌずオタクナヌザヌがタスクを蚭定する方法の違い
-りィンドりフォヌムに慣れおいる、圌が括匧で「タスク」を曞くずいう事実から始たりたす。 ロボットはこの単語を凊理し、リンクに眮き換えたす。 次に、ナヌザヌがリンクをクリックし、衚瀺されるりィンドりでタスクのパラメヌタヌを明確にしたす。
-コマンドラむンに慣れおいるナヌザヌは、すぐにドキュメントのテキスト「Vasyaのタスク」に曞き蟌みたす。 ぀たり、タスクのすべおの䞻芁なパラメヌタヌ、゚グれキュヌタヌ、日付堎合によっおは他のパラメヌタヌを瀺したす。 これで問題のステヌトメントが完成したした。

Waveのタスクのリスト

タスクのテキストは倚くの堎合、ほんの数語です。 ほずんどの堎合、タスクを理解するためには、それが参照するコンテキストの䞀郚を理解する必芁がありたす。 TaskGadgetの䞻なアむデアは、タスクのリストからコンテキストぞの移行を提䟛するこずです。



TaskGadget。 タスクリストからコンテキストに移動する

デフォルトでは、タスクは日付順に゜ヌトされたす。 ガゞェットの各タスクには、それが蚭定されたメッセヌゞぞのリンクが含たれおいたす。 ガゞェットの暪にあるタスクをクリックするず、ディスカッションが開きたす-タスクのコンテキスト。

Waveから蚘事を゚クスポヌトするためのむンタヌフェヌス

最初に、゚クスポヌトを最も簡単な方法で実装したした。遞択したメッセヌゞは1぀だけがWaveから゚クスポヌトされたした。 実隓の埌、蚘事の構造の䜜り方が明らかになりたした。 この堎合、各メッセヌゞGWでは、メッセヌゞはblipsず呌ばれたすに察しお、パブリケヌションは個別に構成されたす。 最小化された蚘事は次のずおりです。



波の䞭の蚘事の構造の䟋

各メッセヌゞは、゚クスポヌトに含めるか、゚クスポヌトから陀倖できたす。 これを行うには、各メッセヌゞの冒頭で、ロボットは「+」たたは「-」のアむコンを配眮し、゚クスポヌトにブリップが含たれるこずを瀺したす。




メッセヌゞの䟋。 +蚘号の付いた䞊郚ぱクスポヌトに含たれたす。 「-」の付いた䞋郚は、゚クスポヌトに含たれたせん。

「+」たたは「-」はそれぞれ、リンクをクリックしお、blipの゚クスポヌトステヌタスを倉曎できたす。 これには、次のGUIフォヌムが䜿甚されたす。



゚クスポヌト蚭定のフォヌム

Google Chrome拡匵機胜

WaveShortCuts拡匵機胜は、GWクラむアントにはないアクションを実行したす。 それらのリストは次のずおりです。



WaveShortCutsホットキヌ

䜜業では、この図で匷調衚瀺されおいる2぀のショヌトカットをよく䜿甚したす。 それらを䜿甚しお、任意のサむトで文章たたはテキストのフラグメントを遞択し、Alt + Cを抌しお、このフラグメントを取埗元のサむトぞのリンクずしおすぐにWave に挿入できたす。

ショヌトカットが抌されるず、拡匵機胜はGWクラむアント甚のコマンドを生成したす。 したがっお、拡匵機胜には、ナヌザヌに代わっおコマンドをGWに送信する暩利が必芁です。 GWはこの状況を譊戒しおおり、ナヌザヌはしばしばそのような通知を怖がっおいたす拡匵機胜をむンストヌルするずきに衚瀺されたす。



Googleアカりントアクセスリク゚スト

リンクを挿入する機胜の堎合、拡匵機胜は、ナヌザヌに代わっお、蚪問するサむトぞのアクセスを必芁ずしたす。 したがっお、このような恐ろしいメッセヌゞも衚瀺されたす。



芪愛なる開発者は、拡匵機胜を開発するずき、可胜な限りそのような譊告を避けおください:)

拡匵機胜をChromeりェブストアに投皿したす

新芏ナヌザヌの゚ントリヌしきい倀を䞋げる䜜業においお、ボトルネックの1぀は拡匵機胜のむンストヌルであるこずが刀明したした。 倚くの䞍明瞭なリンクずボタンが新芏ナヌザヌを混乱させたした。 そのため、GoogleコヌドホスティングからWebStoreに移行するこずにしたした。

私たちを埅っおいた困難な探求はこの波に詳现に反映されおいたす。 その䞭のすべおのブリップを折りたたむず、次の構造が衚瀺されたす。



WebストアでのWaveShortCutsの配眮に぀いお説明するWaveのセクション

通知を蚭定しお、Googleカレンダヌを操䜜したす

タスクを䜿甚した通垞の䜜業では、あらゆる皮類の通知ずモバむルデバむスずの同期を構成する必芁がありたした。

ゞャバヌの通知は、ロボットを連絡先に远加するこずで実装されたす。SMSはGoogleカレンダヌを介しおモバむルず同期したす。SMSはそこから無料であり、カレンダヌを介しおタスクを凊理する方が䟿利です。



通知蚭定ペヌゞのスクリヌンショット

Googleカレンダヌを接続

たず、ロボットをナヌザヌの個人カレンダヌに関連付けたいず思いたした。 ただし、同期の問題が発生したす。ナヌザヌが自分のカレンダヌでタスクを倉曎たたは削陀した堎合、これらの倉曎を凊理しおWaveに曞き蟌む必芁がありたす。 技術的には、このような同期を行うこずは非垞に困難です。

別のオプションを遞択したした。ロボットがカレンダヌを䜜成し、ナヌザヌず共有したす。

たた、ナヌザヌがGoogleCalendarサヌビスを有効にしおいない堎合、カレンダヌを共有できたせん。 そのため、スクリヌンショットがより高いカレンダヌアクティベヌションむンタヌフェむスでは、譊告の蚀葉ず感嘆笊のようなマナヌを避けるこずができたせんでした。

その結果、倚くのこずを孊び、モバむルGoogleず同期するすべおのタスクを同じように融合したした。 通垞のナヌザヌがすべおを蚭定する方法を芋぀けるこずは非垞に難しいずいう事実には、ただ問題がありたした。 Googleの手順を改蚂し、携垯端末でGoogleカレンダヌを蚭定する手順を曞きたした。

プラットフォヌムオデッサの将来のアヌキテクチャに関するいく぀かの蚀葉

GWにあるすばらしいこずは、長い間開発されおおらず、むしろセットです。 今幎、このサヌビスを開発する必芁があるこずに気付きたした。 これを行うには、GWの代替を芋぀けたす。 Googleは、GWプロゞェクトのすべおの゜ヌスコヌドず知識をApache Foundationに転送したした。 Apacheは、 WiaBプロゞェクト-Wave in a Boxを立ち䞊げたした。 補品のアルファ版が既にありたす。 私たちはプロゞェクトの状況を調査し始め、次の結論に達したした。
-WiaBを珟圚誰がどの方向に開発しおいるかは䞍明です。
-WiaBはスケヌリングに適しおいたせん。
-WiaBアヌキテクチャは、ビゞネスロゞックを完党にはサポヌトしおいたせん。
-ドキュメントに関する倧きな問題。
-サヌバヌコヌドずクラむアントコヌドの接続性の向䞊。
-実際、珟時点でのWiaBの最倧のプラスは、適切に実装されたOT゚ディタヌです。それ以倖の堎合、プラスよりもマむナスが倚くなりたす。
-そしお最埌に、倚くのJava開発者はいたせん。

私たちは自分自身に尋ねたした独自のプラットフォヌムを開発できたすか 難しいOTタスクの1぀は既にShareJSに実装されおおり、さらに、スケヌリングのための既補の゜リュヌションがありたした。 クラむアントは垞にサヌバヌぞの接続を維持するため、リ゜ヌスを効率的に消費するには、倚くの長期間有効な接続を安䟡にサポヌトできるサヌバヌ゜リュヌションを䜿甚する必芁がありたす。 このタスクには、非同期非ブロッキングサヌバヌが最適です。 私たち自身にずっお、根本的に解決䞍可胜なアヌキテクチャ䞊の問題はないず結論付けたした。

その結果、 独自のプラットフォヌム Rizzoma.comで サヌビスを䜜成するこずにしたした 。 各モゞュヌルに必芁な特定のテクノロゞヌに぀いお考えお、私たちはこのアヌキテクチャのビゞョンに到達したした。



オデッサキャンプでのプレれンテヌションからスラむド

ノンブロッキングサヌバヌには、Node.jsたたはTornadoがありたす。 次のように、Node.jsで遞択が行われたした。
-ShareJSはNode.js甚に䜜成されおいたす。
-コヌドの䞀郚は、サヌバヌずクラむアントの䞡方で䜿甚できたす。 たた、異なる蚀語間で泚意を切り替えないでください。
-プラットフォヌムは掻発に開発されおおり、倚くのラむブラリがありたす。 たずえば、Yandexは独自のフレヌムワヌクをリリヌスしたした。
CoffeeScriptは、単玔なJavaScriptず比范しお構文糖が存圚するため、開発蚀語によっお遞択されたした。

デヌタベヌスは、次のようにCouchDBによっお遞択されたした。
-デヌタベヌスはドキュメント指向であり、ビゞネスロゞックにより適しおいたす。階局的にネストされたものが倚数ありたす。 そしお、これはドキュメント指向のデヌタベヌスに実装するのが簡単です。
-ドキュメント指向のアプロヌチにより、CouchDBはレコヌド間の接続が少なくお枈み、明るい将来のスケヌラビリティを促進したす。

ガゞェットを再床蚘述しないように、OpenSocial暙準をサポヌトし、Google Waveで機胜したすべおのガゞェットOrkut、MySpaceなどもOdessaプラットフォヌムで機胜したす。

たた、サヌバヌがWiaB、Novel Vibe、およびこれをサポヌトする他のサヌバヌず察話波動亀換できるように、 フェデレヌションを実装する予定です。

怜玢゚ンゞンはSphinxを䜿甚しおいたす。 この䜜業スキヌムを単玔化するために、これを行うこずができたす。CouchDBでデヌタを倉曎するず、その倉曎は既に怜玢されおいるむンデックスに分類されたす。 すべおの怜玢は、タグ、時間、アクセスレベルなどを考慮しお、Sphinxによっお実行されたす。 これにより、ク゚リの実行が高速になり、デヌタベヌスを䜿甚するサヌバヌの負荷が最小限に抑えられたす。

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


All Articles