投稿

[Go言語] 豆知識、小ネタ

まだまだよくわかっていないGo言語。 何をするにもどん詰まる。とにかく小ネタを記録する。 byte配列を文字列(string)に変換する var s = make([]byte,10) s[0] = 'a' fmt.Printf("result=%s",string(s) ) stringをbyte配列に変換する s := "test" b := []byte(s) 何でも入るmapを作る(keyは文字列) m := make(map[string]interface{}) m["first"] = "test" fmt.Printf("result=%s",m ) mapをJSON化する "encoding/json"のimportが必要 m := make(map[string]interface{}) m["f"] = "test" r,_ := json.Marshal(m); fmt.Printf("result=%s",string(r) ) JSON文字列をmap化する "encoding/json"と"strings"のimportが必要 s := strings.NewReader(`{"f":"test"}`) d := json.NewDecoder( s ) m2 := make(map[string]interface{}) d.Decode(&m2) fmt.Printf("result=%s",m2 ) TimeをJSON化する time.Timeはjson.MarshalでJSON化してくれないようだ。 というわけで、マニュアルでJSON化。 t := time.Now() s,_ := t.MarshalJSON() fmt.Printf( "%s", s ) string...

[Dart] PolymerでObservableにsetterを使う

observableのプロパティに、setterを使いたいときってあるよね。 こんな感じ。 String _title = ""; @observable String get title => _title; set title( String t ) => _title = "hoge $t"; で、html側で{{title}}ってやるわけですが。 でも、これ動きません! titleの実体がfunctionだからだと思いますが、変更イベントが飛ばないのです。 というわけで、自分で変更イベントを飛ばせばOKとのこと。 具体的には、setterを下記のように変更します。 set title( String t ) {   _title = notifyPropertyChange( #title, _title, t ); } notifyPropertyChangeの仕様は下記の通り。 dynamic notifyPropertyChange(Symbol field, Object oldValue, Object newValue) 戻り値はnewValueとなっています。 そして、これをするとgetterの@observableが不要になります。つまり、observableに頼らず、自前で変更イベントを出せるってことですね。 …っていうか、#titleって何ヨ? 本来、const Symbol("title")としなければいけないっぽいが、表記を省略できるってことかね? 参考資料: 同様の質問 https://groups.google.com/a/dartlang.org/forum/#!topic/web-ui/hxCqmwjnLIA まさにこれのサンプル https://github.com/sethladd/dart-polymer-dart-examples/tree/master/web/setter_with_observable_property_change

[Dart] PolymerElementを動的に作成

PolymerElementを状況に応じて動的に作成すること、したいよね〜。 Seth Laddのサンプルによると、ore-tagというカスタムタグがあるとして、 querySelector("#place").childlen.add( new Element.tag("ore-tag") ); とすればいけるとのこと。 確かにこれで問題なく動くのだが、ワナがひとつ。 Pub Buildすると正しく動かんのだ、これが。 具体的には、enteredViewが呼ばれない。グハッ! バグじゃね?

[Dart] ゲーム作ってみた

Dartでゲーム作ってみたよ。 http://www.niku-mansei.com/contents/05club/club04game00.html Canvasバリバリ系。 フレームはいわゆるsetTimerで取っている。 スマホでも動作するけど古い端末だとちょっと重いかも。 描画をキレイにするために、実は倍の解像度で描画してるんだが(いわゆるRetina対応)それが原因っぽい。 しかし、Dartは楽ちんですな〜。 もう、JavaとかObjective-Cとかやる気しないな〜。

[Dart] Polymer 資料&豆知識

DartでWebアプリを作るならPolymerってヤツを使わずにはいれないよね。 ということで、下記、勉強のための資料。 Seth Laddによるサンプル https://github.com/sethladd/dart-polymer-dart-examples/tree/master/web Polymerのサイト http://www.polymer-project.org/ templateのリファレンス http://www.polymer-project.org/platform/template.html 豆知識 on-clickのコールバックメソッドの引数は決まっている。 void handle(Event e, var detail, Element target ) on-clickのコールバックに独自の引数を渡したい時は独自attributeを使う。 HTML <td on-click="{{handle}}" data-key="{{data.key}}"> Dart void handle(Event e, var detail, Element target ) { var hoge = target.attributes['data-key']; ... } PolymerElementにて表示開始を取る時は、enteredView()をオーバーライドする。 void enteredView() {   print("表示されたなう"); } PolymerElement内でquerySelectorするときはshadowRootを使う。 void enteredView() {   var e = this.shadowRoot.querySelector("#mes");   e.text = "表示されたなう"; } PolymerプロジェクトをJavaScriptアプリとしてエクスポート 通常のDartプロジェクトはdart2jsを使うんだが、Polymerプロジェクトの場合は、「Pub Build」...

[iOS]ステータスバーを明るくしてみる

iOS7でステータスバーの文字を明るい色に設定する方法について。 いろいろな情報に惑わされたが、結局、下記メソッドを各ViewControllerに追加するだけで効いた。 - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } ちなみにこれは、ナビゲーションバーが出ていると効かない(呼ばれない)。doesn't workってやつだ。 試しにやってた画面がたまたまナビゲーションバー付きで、やってもやっても効かず半泣きになってしまったぞ。 …と思ったけど、もうひとつ条件があるようだ。 どうやら、TabViewController内に入っている各Viewで上記を設定しても効かないっぽい。 手元のプロジェクトで、各Viewで設定しても効かなかったのだが、TabViewControllerで設定したら効いた。 (ただ、そのプロジェクトはTabViewControllerをかなりカスタマイズしているので、そのせいの可能性もある)

[JavaFX] WebView関連のTIPS

JavaFXのWebView、こいつは使えるかもしれないぜ。。 右クリックのメニュー(Context Menu)を出なくする webView.contextMenuEnabledProperty().setValue(false); Javaから好きなスクリプトを実行する(またはwindowオブジェクトを取得) JSObject obj = (JSObject)webView.getEngine().executeScript("window"); window.openでポップアップを出なくする webView.getEngine().setCreatePopupHandler( new Callback<PopupFeatures,WebEngine>() { @Override public WebEngine call(PopupFeatures arg0) { return null; } }); 全てのAタグを取得する Document doc = webView.getEngine().getDocument(); NodeList nodeList = doc.getElementsByTagName("a"); 上で取得したElementにclickリスナーを貼る for (int i = 0; i < nodeList.getLength(); i++) { EventTarget t = (EventTarget) nodeList.item(i); t.addEventListener("click", listener, false); } 上で貼るリスナーの実装 EventListener listener = new EventListener() { @Override public void handleEvent(Event evt) { String domEventType = evt.getType(); if (domEventType.equals("click")) { Element el = (Element)evt.getCurrent...