@ntaoo (twitter, github, etc)
Dartを試してみましょう
開発用コンパイラ
ES6がコンパイルターゲット
最近安定してきた
コンパイル速度とデバッガビリティ重視
1秒から10秒ほどでコンパイル
AngularDartでのユースケースでもうすこし速くなって欲しい
リリース用コンパイラ
パフォーマンスとサイズを最適化
コンパイルに30秒から90秒ほどかかる
Dartから自然に扱えるように整備されたWebAPI
大部分はWebIDLから生成されたJS Interop API
Experimentalなドラフト版WebAPIを使いたければ、自分でpackage:jsを使ってInteropコードを書く必要あり
final div = new DivElement()
..id = "anElementId"
..classes.addAll(['aClass', 'anotherClass'])
..style.color = 'red'
..children.add(new Element.span()..text = 'The inner text.')
..onClick.listen(handleOnClick);
class ScrollPreventing {
final Element _element;
final List<int> _targetKeyCodes = const [
KeyCode.SPACE,
KeyCode.PAGE_UP,
KeyCode.PAGE_DOWN,
KeyCode.END,
KeyCode.HOME,
KeyCode.LEFT,
KeyCode.UP,
KeyCode.RIGHT,
KeyCode.DOWN
];
StreamSubscription<Event> _eventSubscription;
bool _isPreventing = false;
ScrollPreventing(String selector) : _element = querySelector(selector);
bool get isPreventing => _isPreventing;
set isPreventing(bool prevent) {
if (prevent) {
_eventSubscription = StreamGroup.merge<Event>([
_element.onMouseWheel,
_element.onTouchMove,
_element.onKeyDown.where((e) => _targetKeyCodes.contains(e.keyCode))
]).listen((e) => e.preventDefault());
} else {
_eventSubscription?.cancel();
}
_isPreventing = prevent;
}
}
dart:htmlで、KeyCodeを始め
さまざまなconstantを定義済み
dart:asyncが標準でStreamを提供
package:async (from Dart Team)
Event propertyも定義済み
DOM APIとDartの自然なシナジー
ElementStream<KeyboardEvent>
final sanitizer = new NodeTreeSanitizer(new NodeValidatorBuilder()
..allowHtml5()
..allowElement('XREF'));
element.setInnerHtml(htmlString, treeSanitizer: sanitizer);
DOMを扱うのが
格段に楽になる
ほんとうに楽
本質的に、必要?
たしかにマシンリーダブルなwebとの親和性は低くなる
そもそもBot側がJSを理解すべき?
Webアプリの起動時間が長い現在のブラウザの仕組みが貧弱なのでは
とはいえ、現状のwebでは需要は高い
過渡期
SEOという、ビジネスの収益に大きな影響が出る要素
UXとSEOの間のジレンマ
奇妙すぎる
Webページを読んでいるときに出会う知らない単語、表現等を選択して、MyLexicon Dictionary ChromeExtensionを起動すると、その定義と例文が表示される。
さらにそれをそのコンテキスト(センテンス、ページURL、ページタイトル)と共にMyLexiconに登録する。
定義が辞書になくても、英文であればなんでも登録可能。
真似したい言い回し等覚えたいものをかたっぱしから登録しまくる。
間隔を空けてReviewを繰り返し、記憶に定着させる(SRS)
MyLexicon Dictionary = 英英辞典と登録済みLexical Itemsおよびその学習状況の表示を統合
今後の開発予定
UI for Mobile Web 😅
Much Better landing page
Ads
Review system ver.2
Web push notification for the review.
Web payments support for the subscription service
Flutter (including adding a lexical item feature)
Web Extension for Firefox, Edge
Much much more...
収益化をめざしてやっていく
Dartを選択した理由
すべての領域に対応可能
Web, Native Mobile, Server, Cli
スモールスタートからダイキボ開発まで
言語の統一による
コードの共通化
言語間思考コンテキストスイッチの無さ
Dart自体の快適さ、高生産性。DXが最高
package:
web_app
AngularDart
package:
web_extension
AngularDart
Flutter
(予定)
package:
shared_components
AngularDart
Plain Dart, without dart:html
(But, still depends on Angular DI)
package:model
Firebase
For Static Hosting, Authentication
package:server
On GCP
Communicate with other API services
package:
client_server
MylexiconDictionary componentおよび
関連modelを
web_appとweb_extensionで共有