✖
✖
✖
miss
miss
✖
Sierra にしたらリモートの日本語が化けるようになった
以下のような環境で日本語が化けるようになった。
- macOS Sierra
- リモートで screen を使っている
- ssh host -t screen -r で復帰している
問題ないケース
- Sierra にする前は問題なかった
- ssh host して手動で screen -r
解決方法
どうやら ssh -t したとき、特定の環境変数がリモートに渡されなくなったみたいだった。以下のように ~/.ssh/config に追記した
SendEnv LANG
Sierra での man ssh から抜粋。複数書く場合はスペース区切りか SendEnv 自体を複数書けば良い。
Specifies what variables from the local environ(7) should be sent to the server. The server must also support it, and the server must be configured to accept these environment variables. Note that the TERM environment variable is always sent whenever a pseudo-terminal is requested as it is required by the protocol. Refer to AcceptEnv in sshd_config(5) for how to configure the server. Variables are specified by name, which may contain wildcard characters. Multiple environment variables may be separated by whitespace or spread across multiple SendEnv directives. The default is not to send any environment variables.
✖
ゼルダやってた
macOS Sierrra にしたら ssh 時に毎回秘密鍵のパスフレーズを聞かれるようになった
Sierra になる前はキーチェーンに勝手に登録されてうまいことやってくれてた気がするけど、うまいことやってくれなくなった。
機能が削除されたわけではなくてデフォルトで無効化されたらしい。
Host * AddKeysToAgent yes UseKeychain yes
を ~/.ssh/config に追記した
SmooseMouse が Sierra で使えなかった
https://steelseries.com/downloads?utm_source=smoothmouse.com&utm_medium=recommendation
から ExactMouse tool というのをダウンロードして起動すると加速をきれる。
✖
✖
Ruby Sequel で生 SQL をメインに使う
Sequel はドキュメント見ると SQL そのまま書くやりかたもとクエリビルダを介すやりかたも許されていると感じるので (別に他のライブラリでも可能だろうが)、導入負荷が低くてよさそうです。結構機能はもりだくさんありますが必要なければ使わないのも許されてる感じもよさそうです。
Sequel でのクエリ発行のしかたは sequel/querying.rdoc at master · jeremyevans/sequel · GitHub を読むとだいたい網羅できるが、特に自分に重要なところだけ別途メモしておく。
モデルを使っても使わなくても SQL クエリはそのまま発行できる。複雑な JOIN も安心。
モデルを使わない場合
SQL を発行して Hash として取得できる。
dastaset = DB["SELECT * FROM foo"] dataset.all # 全インスタンス化
モデルを使う場合
任意の SQL を発行しつつあるモデルとしてインスタンス化したい場合
class Foo < Sequel::Model(:foo)
end
dataset = Foo.with_sql("SELECT * FROM foo")
dataset.all # 全インスタンス化 Sequel::Model(:foo) の :foo はテーブル名を渡す。何も渡さないとクラス名を複数形にしたものを探そうとする。が明示したほうが良いと思います。
どういうときにモデルを使うか
使いたいときに使う。単にクエリ投げたいだけならモデルはいらないし、特に JOIN がからむなら余計なことせず Hash で返ってくるのは気楽で良い。
機能的な面からいえば、DBからひいてきたインスタンスにメソッドを生やしたいというときはモデルを使ったほうが楽。既存の行を update したいときもモデルがあったほうが楽。
Sequel のモデルも若干マジカルで、DBコネクションがないとモデル定義できなかったりする。キモいけどテーブル情報を使ってアクセサを定義したりするっぽい。
JavaScript で MQTT するなら MQTT.js が良い
https://github.com/mqttjs/MQTT.js
- ブラウザ (MQTT over WebSocket) でも node.js でもほぼ同じ使いかたができる
- 自動でリコネクトしてくれる
- API がモダン
Eclipse Paho の JS 版を一時期使っていたが、完全に乗り換えました。
MQTT over WebSocket の場合
ドキュメントの通りだけど以下のようにする。TLS なら wss にするだけ。
const client = mqtt.connect("ws://" + location.hostname + ":" + (location.port || 80) + "/mqtt", {
username: USER,
password: PASS,
reconnectPeriod: 500
}); ✖
Material Design Lite のテキストフィールドと Vue.js の相性があんまりよくない
Material Design Lite のテキストフィールドの input 要素を Vue.js で扱うとき、普通に v-model で two way binding すると、ラベル位置が更新されなくて文字が重なってしまったりする。つまりこれは Vue.js側の更新処理がMDL側に適切に伝わっていないために起こる。
MDLのソースを軽く読んだ解決として、mdl-js-textfield クラスがついている親要素に v-mdl 属性を追加し、以下のようにカスタムディレクティブを定義すると解決する。あんまり美しくないがしかたない。
静的な要素だけなら upgradeElementは必須ではないが、動的になると必須になるためついでにやっている。
Vue.directive('mdl', {
bind: function (el) {
componentHandler.upgradeElement(el);
},
update: function (el, binding, vnode) {
const textfield = el.MaterialTextfield;
if (textfield) {
Vue.nextTick(function () {
textfield.checkDisabled();
textfield.checkValidity();
textfield.checkDirty();
textfield.checkFocus();
});
}
}
});





















