Retired Colourman

何度も朝がやってくる

windowsでgulpを使ってhamlをビルド

windowsでgulpでhamlをビルドしたい。わかる。

How to

gulpでhamlを扱うにはgulp-hamlgulp-ruby-hamlがある。gulp-hamlが上手く動くならそれでいいと思う。僕はダメだったのでgulp-ruby-hamlを使うしかなかった。

gulp-ruby-hamlhamlコマンドを直接叩いて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 file for haml in Windows

多分これでなんとかなると思う。gulpを使い始めてあまり立ってないので間違っているところがあったら指摘してもらえたりすると嬉しいです。


2015/11/26 追記

上記のプルリクがmergeされてた。普通にnpm installすればOK。

hubotから診断メーカーを行う

診断メーカーをhubotでやる

作った。特に難しいことがあったわけじゃないけどネットに転がってる資料とちょっと診断メーカーの仕様が変わっていたのでそこで詰まってしまった。

参考

osak/shindanmaker · GitHub

syussya.coffee · GitHub

Linuxでタッチスクリーンを回転して利用する

Nexus7のようなデバイスにLinuxを入れて活用する場合、どうしても画面の向きがデフォルトだと使い辛いという問題がある。そこでシステム設定から画面を横表示にする人は多いが、その場合タッチスクリーンで取得する座標は変わらないため、タッチがまるで使えないといった状況になることがある。その問題を解決するためには、xinputコマンドを利用する。

解決方法

タッチパネルの名前を取得する

xinput list

というコマンドを打つと、次のような結果がでる。

f:id:sh4869:20151101012020p:plain

この中からタッチパネルっぽいのを探す。この場合は確実に「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の行列は

https://upload.wikimedia.org/math/f/4/a/f4ad490993bbaa220e41f727f07a5bd0.png

に、θ=0を入れるとあのような座標になることがわかる。そこで、θ=90を入れると、

⎡  0 1 0 ⎤
⎜ -1 0 1 ⎥
⎣  0 0 1 ⎦

というふうになる。あとはそれを左上から順に入れていく。そうすると最初に例で示したコマンドになる。

あとはスタートアッププロセスに追加しておくなどすると、便利に使えると思う。

参考

Touch screen and screen rotation (Page 1) / Tips, Tricks & Scripts / CrunchBang Linux Forums

X/InputCoordinateTransformation - Ubuntu Wiki

DBHT作りなおした

受験生なのに懲りないでコード書き直してた

github.com

もともと一年前ぐらいに書いたコードなのでひどかった。それをベースに直したのでやっぱり直してもひどかった。

もともとの名前は Delete Black History of Twitter だったので、それの頭文字をとってプロジェクト名にした。いろいろとまだまだダメダメだしRubyだとWindowsつらい~~~~~ってなりがちだから他のもので作りなおしたいんだけど受験生だった。悲しいなぁ。

あと、得た知見としてRubyのopenに関するものがある。

file = open("/pass/to/file")

lines = file.readlines

ってやると、linesにファイルの各行が配列としてはいるんだけど、それを使うときは

line1 = lines[0].gsub("\n","")

ってやってあげないとエラーの元になる。

と思って書いたけど、これいろんな先人がもう書いてますね。はい。

あとこういう記事をいちいちはてなに書くのもどうなのかと思っているので、適当にgithubレポジトリつくって遊べるようにしたいなぁ

最後に

大学合格できる気がしないので大学が僕を指名してほしさがある

DartでTwitterのStreaming APIに接続してみた

結果

出来た。

github.com

技術的な話

別にそこまで技術的な話があるのかと言われるとないです。

//接続部分
//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も作れるね、やったね。