投稿

10月, 2014の投稿を表示しています

[Go] mapのソート

配列のソートは強力だけど、 mapのソートは、JavaのTreeSetみたいには行かないようだね。

[Go] Push配信サーバーを作ってみた

GoでPush配信サーバーを作ってみた。 go run gopush.go で実行すると8085ポートで待ち受け開始。 別のターミナルとかで、 curl -v http://localhost:8085/con?key=hoge ってやると配信を受けられる。 ブラウザとかで、 http://localhost:8085/api/push?key=hoge&mes=hello にアクセスすると、ターミナルにhelloが通知されるよ! このkeyで通知先を変更するのだ。 こんなの簡単に作れちゃうGo言語、すごいね! goroutine(go/channel/select)が強力すぎて、Javaのwait/notifyとか戻れないよ!

[Go] http、chunked、切断検知、TimeOut、channelのclose

Push配信するhttpサーバーを目指すサンプル。 盛り込んだ要素は下記の通り。 httpサーバー →普通です。すみません。 Transfer-Encoding: chunked →しょっぱなにw.WriteHeader(http.StatusOK)、  そして、w.(http.Flusher).Flush() goroutine&channel time.Sleep →渡す値は、単位を掛ける。 channelのcloseとその検知方法 →close()は組み込み関数。  そしてchannel受信には2番目の戻り値があることを知れ timeoutを仕掛ける方法 time.Afterでchannelゲットだぜ 通信切断の検知方法 →w.(http.CloseNotifier).CloseNotify()でchannelゲットだぜ 複数channelの同時受信 →selectをforで無限ループだぜ。あとラベル付きbreak。 ロギング →log.Println()だぜ。 盛りだくさんだぜ~

[Go] Chunked Transferで返すHTTPサーバー

HTTPのストリーミングサーバーのいわゆるLong Pollingってヤツ。 net/httpを使う普通のやり方に加えて、 ポイントは WriteHeaderを先に呼ぶ http.ResponseWriterをFlushする ってこと。 Transfer-Encodingヘッダをchunkedにするとか、 Content-Lengthヘッダをセットしてはいけないとか、 は、勝手にやってくれる。 これを起動したならば、curlコマンドで試してみませう。 curl -v http://localhost:8085/ ヘッダが表示され、 < HTTP/1.1 200 OK < Date: Fri, 24 Oct 2014 05:14:14 GMT < Content-Type: text/plain; charset=utf-8 < Transfer-Encoding: chunked その5秒後に one その5秒後に two が表示される!

[Angular.dart] 試してみた

バージョンが1.0.0になったし、 Angular.Dartを試してみた。 まずは、 Angular.Dartサイトのチュートリアル からサンプルをダウンロード。 なるほどなるほど。 っていうか、{{name}}って見えてますけど。 ng-cloakを設定しなければイカン? してもダメですけど。 Dart版では、自力でdisplay:noneを設定しなければいけないとのこと。 <style>     [ng-cloak] {       display: none !important;     } </style> ・ ・ <body ng-cloak> ・・・まあいいや。 次、Chapter_02。 Controllerねぇ~。 へぇ~。 って、ビルドエラー出ましたけど。 どういうこと?? おっと、Dart版ではControllerがボツってることが判明。 なぬ~?? よく考えてみたら、普通にDartのクラスで良いので確かに不要だわな。 っていうか、チュートリアル更新してよ。 急にこのサイト信用できなくなったよ、もう。 JS版とDart版の違いをまとめたサイトがこちら。 http://victorsavkin.com/post/86909839576/angulardart-1-0-for-angularjs-developers-introduction 上記サイトにリンク貼ってあるサンプルはこちら。 https://github.com/vsavkin/angulardart-sample-app 公式から飛べるけど、やりたい事別サンプルはこちら。 https://github.com/shailen/angulardart-samples/tree/master/mini_samples#angulardart-mini-samples

[Dart] Polymer : 独自selectを作ってみた

HTMLのselectって基本的にワナが多いよね。 Polymerでのselectも正直言って不便。 valueでは初期値が渡せないのでselectedIndexでやるしかないのだが、indexって扱いづらい。 <select value="{{src}}"> というわけで、いい加減イヤになって、独自のカスタムselectを作ってみた。 (Paper Elementsを使うとちゃんとしているのかなー?) こんな感じ。 でも、IEとFirefoxでは動かないんだよね! $['select']が正しく効かないのよ。 Polymerって一体いつ使い物になるのか?って感じだよね…。 Angularにするかな…。

[Dart] Polymer : カスタムフィルタを作成する

PolymerでWebアプリを作っている時、 値段を表示したい時とかあるじゃないですか。 <div>スマイル{{ price }}円</div> ってやるじゃないですか。 でも、値段って大抵3桁毎にカンマ付けないと怒られるじゃないですか。 というわけで、Dart側で、 var nf = new NumberFormat("#,##0","ja_JP"); price = nf.format(rowPrice); とかやるのちょっとバカバカしいじゃないですか。 っていうか、こういうのって表示の問題だと思うんですよね! であれば、MDVでいうとViewであるHTML側でなんとかならんのかと。 って思ってたのですが、 そういうとき、Polymerのカスタムフィルタ機能でなんとかなりそう。 [HTML側] <div>スマイル{{ price | priceformat }}円</div> [Dart側] NumberFormat nf = new NumberFormat("#,##0","ja_JP"); String priceformat( String str ) => nf.format(str); 以上。 本家のPolymerでは、 HTML側でfilterに引数を設定することも可能 なのだが、内部のソース(polymer_expressions/eval.dart)を見た感じ、無理じゃね?という感じ。

[Dart] Futureサンプル 連鎖編

Futureがまだ直感的に使えない。 パッと出てこない。 下記は、Futureを連鎖させるサンプル。 FutureAの次にFutureBをやりたい時に使う。 HttpRequest.getString("http://hoge.com/") .then( (str) {   var  result = str+"hoge";   return new Future.value(result); }) .then( (r) {   print(r);  // http://hoge.com/から取得した文字列にhogeを追加したもの })

[Dart] Polymer : Shadow Elementの取得

Shadow Element(ほんまもんのHtmlElement)を取得するには、 PolymerElementの$を使う。 jQueryっぽいが、ここにはidしか指定できない。 (だって、Map<String,Element>だ) しかも、制限があって、template if等で消される可能性のあるものは検索できないようだ。 (polymer[0.12.2+1]で確認) <polymer-element> <template>   <div id="hoge">  // ←これは取得可能    <template if="{{ visible }}">      <div id="fuga">   // ←これは取得できない      </div>    </template>   </div> <template> </polymer-element> polymerの各種ケースのサンプル https://github.com/dart-lang/polymer-dart-patterns

[Dart] Polymer : inputのchangeイベント

inputでのon-changeイベントは、focusをlostした時の意味。 編集内容の変更をリアルタイムでウォッチするイベントはon-inputだ。 ただそれだけ。