windowsでgulpを使ってhamlをビルド
How to
gulpでhamlを扱うにはgulp-hamlとgulp-ruby-hamlがある。gulp-hamlが上手く動くならそれでいいと思う。僕はダメだったのでgulp-ruby-hamlを使うしかなかった。
gulp-ruby-hamlはhamlコマンドを直接叩いてhamlのビルドをしてくれるので、hamlさえちゃんと動けばちゃんと動くのが嬉しい。が、-Eオプション(エンコーディングオプション、UTF-8とかやる奴です)をサポートしていない。windowsだとhamlはちゃんとエンコーディングを指定しないとエラーを吐くのでこれはマズイ。(Haml in Windowsでのエンコードについて - Laboratory of Scarletを参照してほしい)
ので、プルリクでも送るか~~と思ったらもう送ってる人がいた。作者が完全に見ていないだけだった。
added haml encoding option by mongorian-chop · Pull Request #3 · moneypenny/gulp-ruby-haml · GitHub
仕方ないのでnpmをインストールする時に工夫するしかない。npmはgit経由でinstallするパッケージを指定することが可能なので嬉しい。
npm install --save git://github.com/mongorian-chop/gulp-ruby-haml.git#add-encoding-option
あとは適当にgulpfile.jsを書く。
多分これでなんとかなると思う。gulpを使い始めてあまり立ってないので間違っているところがあったら指摘してもらえたりすると嬉しいです。
2015/11/26 追記
上記のプルリクがmergeされてた。普通にnpm installすればOK。
hubotから診断メーカーを行う
作った。特に難しいことがあったわけじゃないけどネットに転がってる資料とちょっと診断メーカーの仕様が変わっていたのでそこで詰まってしまった。
参考
Linuxでタッチスクリーンを回転して利用する
Nexus7のようなデバイスにLinuxを入れて活用する場合、どうしても画面の向きがデフォルトだと使い辛いという問題がある。そこでシステム設定から画面を横表示にする人は多いが、その場合タッチスクリーンで取得する座標は変わらないため、タッチがまるで使えないといった状況になることがある。その問題を解決するためには、xinputコマンドを利用する。
解決方法
タッチパネルの名前を取得する
xinput list
というコマンドを打つと、次のような結果がでる。
この中からタッチパネルっぽいのを探す。この場合は確実に「elan-touchscreen」だろうということがわかる。
回転させる
下のコマンドはタッチ入力を右回転させるコマンドの例である。
xinput set-prop 'dev-name' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1
最後の「0 1 0 -1 0 1 0 0 1」という数字が重要である。これは3*3の行列(という表現で合っているのだろうか)を表している。
Coordinate Transformation Matrixの初期値はこうなっている。
⎡ 1 0 0 ⎤ ⎜ 0 1 0 ⎥ ⎣ 0 0 1 ⎦
Transformation matrix - Wikipedia, the free encyclopedia
詳しくは上のサイトを見てくれればわかると思うんだけど、つまり上の3*3の行列は
に、θ=0を入れるとあのような座標になることがわかる。そこで、θ=90を入れると、
⎡ 0 1 0 ⎤ ⎜ -1 0 1 ⎥ ⎣ 0 0 1 ⎦
というふうになる。あとはそれを左上から順に入れていく。そうすると最初に例で示したコマンドになる。
あとはスタートアッププロセスに追加しておくなどすると、便利に使えると思う。
参考
Touch screen and screen rotation (Page 1) / Tips, Tricks & Scripts / CrunchBang Linux Forums
DBHT作りなおした
受験生なのに懲りないでコード書き直してた
もともと一年前ぐらいに書いたコードなのでひどかった。それをベースに直したのでやっぱり直してもひどかった。
もともとの名前は Delete Black History of Twitter だったので、それの頭文字をとってプロジェクト名にした。いろいろとまだまだダメダメだしRubyだとWindowsつらい~~~~~ってなりがちだから他のもので作りなおしたいんだけど受験生だった。悲しいなぁ。
あと、得た知見としてRubyのopenに関するものがある。
file = open("/pass/to/file") lines = file.readlines
ってやると、linesにファイルの各行が配列としてはいるんだけど、それを使うときは
line1 = lines[0].gsub("\n","")
ってやってあげないとエラーの元になる。
と思って書いたけど、これいろんな先人がもう書いてますね。はい。
あとこういう記事をいちいちはてなに書くのもどうなのかと思っているので、適当にgithubにレポジトリつくって遊べるようにしたいなぁ
最後に
大学合格できる気がしないので大学が僕を指名してほしさがある
もっと悲しいなぁ pic.twitter.com/iTruR7vKuS
— 4869 (@sh4869sh) 2015, 10月 11
DartでTwitterのStreaming APIに接続してみた
結果
出来た。
技術的な話
別にそこまで技術的な話があるのかと言われるとないです。
//接続部分 //OAuthで接続する(?)用のインスタンスを作成。鍵とかつくってる部分はコード読んで var streamClient = new oauth.Client(oauthToken); //Streaming APIのエンドポイント Uri uri = Uri.parse("https://userstream.twitter.com/1.1/user.json"); //リクエストを生成 var request = new http.Request("GET", uri); //リクエストを送信。 var response = await streamClient.send(request); //来たレスポンスをStream<String>にしてる。 displaytweet(response.stream.toStringStream()); // ツイート表示部分 Future<String> displaytweet(Stream<String> tweets) async { await for (var tweet in tweets) { //ここでtryをやってるのは、JSONのデコードに失敗する可能性があるから。この辺もホントは適切な処理してあげなきゃいけない。 try { var map = JSON.decode(tweet); if (!map.containsKey("delete")) { print(map["user"]["name"] + " " + map["text"]); } } catch (e) { print(e); } } return ""; }
はてなブログはDartのシンタックスハイライトにいい加減対応してくれ。頼む。
(今はjavascriptで代用)
Dartチームがつくってるパッケージでhttpっていうのがあって、それを利用したoauthっていうパッケージを使ってる。正直詳しく解説しても日本でDartかいている人が殆どいないので無駄な気がするし、気になる人はコードを読むかコメント欄で教えて下さい。
問題はいくつかあって、Streamで飛んでくるデータがかならずしもJson単位じゃない(途中で途切れててJSON.decodeするとエラーが吐かれる)から、その辺を上手くくっつけて渡してあげるプログラムを書いてあげなきゃいけないってこと。これはtwitter.dartをstreaming APIを対応させる時に書こうと思ってる。
ただ、ちゃんとTwitter Streaming API に接続できるとわかったのはよかった。時間があるときにちゃんとライブラリにも対応させようと思う。
(受験生なのになんでこんな記事書いてるんだろう)
9/26追記
Fix Stream Parse Program · sh4869/dart_twitter_stream_test@e11ff05 · GitHub
直せました。byteStreamで受け取った時に必ずしもJsonごととは限らないのが原因だったので、普通につなぎ合わせる工夫をすればよかったんだけど、こんなことにめっちゃ時間がかかってしまった。悲しい。まあ何はともあれ使えるようになったので、これでupdate_nameも作れるね、やったね。