土曜日の午後ぐらいから体調が悪くなった。日曜夜ぐらいから良くなって、朝には解熱した。
普段でも夢見が悪いが、熱がでるとさらにひどい夢を見る。なんとかしてほしい
土曜日の午後ぐらいから体調が悪くなった。日曜夜ぐらいから良くなって、朝には解熱した。
普段でも夢見が悪いが、熱がでるとさらにひどい夢を見る。なんとかしてほしい
もはや Promise がスタンダードに入り、モダンな実行環境ではポリフィルすら必要なく使えるケースが増えましたね。
かくいう自分も JSDeferred は使っておらず完全に Promise 依存に切替えております。外部ライブラリ依存なんてないほうがいい!!
機能的にはほぼ変わりがないので機械的に置き換えできますが、Promise は1度だけしか resolve できない点だけ違うので注意が必要。JSDeferred は値を保持しませんが、Promise は resolve した値を保持し、その後の then ではその値が返ってきます。
var resolver;
var promise = new Promise(function (resolve, reject) {
resolver = resolve;
});
promise.then(function (r) {
console.log(r); //=> foo
});
resolver('foo');
promise.then(function (r) {
console.log(r); //=> foo
});
resolver('bar'); // nothing happened (invalid operation) JSDeferred は遅延された (Deferred) な処理を表現していますが、Promise は未来の値に関する約束を表現している点で違いがでます (Promise は値なので継続(手続)のように扱うことはできない)
JSDeferred() のグローバルな next() を引数なし Promise.resolve() に置き換えます。あとの next() は全部 then() に置き換えます。
next(function () {
alert(1);
return next(function () {
alert(2);
}).
next(function () {
alert(3);
});
}).
next(function () {
alert(4);
}); これを
Promise.resolve().then(function () {
alert(1);
return Promise.resolve().then(function () {
alert(2);
}).
then(function () {
alert(3);
});
}).
then(function () {
alert(4);
}); こうじゃ
Promise.all(list) を使う
Promise.race(list)
new Promise( (resolve) => {
setTimeout(resolve, 100);
}); ネットで文章書くときに一番重要なのは、ゴミみたいなことを言ってくる人をできるだけ避けること。
ネットでは常に書き手が最初から不利な状態にある。だから中立よりも負よりに考えて書かなければ、不要な謗りをうける。
読み飛ばしても良いと本人が思った場合その通り読み飛ばす、ないしは読み飛ばさずに内容を理解しようと努めてくれる。なので、そもそもこういう人向けには配慮の必要がない。
読み飛ばすということができず、ただ書いてあること全てを飲みこもうとする。こういう人に対して「ここは読む価値はありませんよ」とか「本題とは直接関係ありませんよ」ということを書く必要がある。そうしないと、こういう人は飲み込めなかった文をそのまま書き手に投げつけてくる。
UIには出ていないがAPI経由だと取得できる。認証なしで誰でもとれる (権限いらない)。
curl https://api.github.com/repos/atom/electron/releases | ruby -rjson -e 'JSON.parse(ARGF.read).each{|release| release["assets"].each{|a| puts "% 10s %s %s" % [release["name"], a["download_count"], a["name"]] } }'
Kazuho's Weblog: H2O version 1.7.0-beta1 released with enhanced mruby scripting, CGI, and much more
H2O version 1.7.0-beta1 からは htpasswd も使える Basic 認証のサポートが入ったので、以下のようなコードは最早必要ありません。
現時点だと h2o に Basic Auth の機能が入ってなさそうなので mruby.handler で雑に書く
mruby.handler: |
USER = "tsun", PASS = "dere"
lambda do |env|
auth = env['HTTP_AUTHORIZATION']
if auth
method, cred = *auth.split(' ')
if method == "Basic"
user, pass = cred.unpack("m")[0].split(':')
if user == USER && pass == PASS
return [ 399, {}, [] ]
end
end
end
[ 401, { 'Content-Type' => 'text/plain', 'WWW-Authenticate' => 'Basic realm="Restricted"' }, [ 'Authorization Required' ] ]
end これをかけたいとこに書けば basic auth がかかる。
最初 htpasswd 読むようにしようとしたが mruby に String#crypt はなかったのでやめた。
現行でも採用事例がある USB コネクタでの急速充電の仕様。USB は規格上 5V なので、急速充電のために電力高めようとすると電流が多くなってしまいコネクタやケーブルの発熱を招く (USB のコネクタは定格では 1.5A までしか流せない) 。なので、供給電圧自体を上げて (9V, 12V, 20V) 供給可能電力を増やそうというもの。
USB 公式には USB PD (Power Delivery) があるが、USB PD のためにはまず USB Type-C コネクタの普及が必要だし、ハンドシェイクが割と複雑なので専用のコントローラICが必要。
一方 Quick Charge 2.0 は既存 USB コネクタを流用した規格かつ簡単なプロトコルなので採用しやすい。
既に対応したモバイルバッテリーがあるし、端末側でも対応しているものがちらほらある。(ZenFone 2 も対応している)。割と単純なプロトコルなので Quick Charge とは言わずに対応してる端末もある (権利的なアレかな)
公式の仕様書がみつからない。NDA? よくわからんけど、サポートチップのドキュメントやリファレンスデザインのドキュメントにはある程度詳しいことが書いてある。
D+, D- ラインに対し 0V, 0.6V, 3.3V の3値を使う。
D+ をプルダウンすると直ちにリセットして Quick Charge 2.0 のステートを抜けるようなので、各状態遷移の間は D+ を0Vにしないようにする必要がある。
D+ 0.6V, D- が GND の場合は 5V のなので、初期化 (D- 1ms プルダウン) 直後は必ず 5V になる。
ref.
http://www.gamma.pl/PDF/powerint/chiphy.pdf
http://www.tij.co.jp/jp/lit/ug/tidu917/tidu917.pdf
4年ほど前の引っ越しからずっと固定回線を契約せずモバイル回線+テザリングだけで自宅回線をまかなってきた。
最初は WiMAX 付きのスマフォだったので良かったのだが (RTTは長いが容量制限はない)、LTE になって 7GB 制限ができてかなり不便になった。
キャリアに不満がつのって MVNO にしたらそもそも安定して通信できなくなった。
ググっても評判の良いプロバイダというのは存在しない。マジで存在しない。どこも名目上のスピードは 100Mbps だったり 1Gbps だったりするけどこれは全くアテにならない。だからといって、口コミみたいなのも全くアテにならない (口コミ書く人のリテラシがバラバラすぎるから)
ということで、2年縛りみたいなクソなことをやってないところのうち安いところから試すことにした。
モバイル回線 + 固定回線で 5120円ぐらい。
金曜あたり頭がぼーっとするなぁと思っていたら、土曜日午後あたりから急激に身体もだるくなってひたすら寝ていた。
Electron の MAS ビルドが v0.34.0 から提供されるようになったので、それを使って出してみた。が、v0.34.0 にはまだ private api usage があって reject だった。バグ報告したらすぐ修正されて、v0.34.2 で治った。
https://github.com/cho45/Chemrtron
App Store に出すことができたら github releases のほうにはパッケージをアップロードしないようにしようと思ったけど、今のところあげてある。パッケージ自体は一緒で sandbox 化もされている。
いろいろ思うとことがあって、開発環境をつくって、いつでもパッチ書けるような状態にするインセンティブがどこかで働くとよいな、と思うとパッケージを releases にあげない (できあいのが欲しければ買う) のがいいと思うんだけど、そもそも Chemr 程度ではそのようなインセンティブは働かないだろうという…
税込 (消費税8%) ¥12,744/年もかかります。勉強代だと思って1回払ってみましたが2度と払いたくない。元をとれるならいいけど
github の API とかに出てくる "sha" は git 的な sha1 で、ファイルの内容のみからとった sha1 ではない。なんか変なヘッダをつけたうえで計算される。
これを node で計算する
var fs = require('fs');
var crypto = require('crypto');
function gitSHA1 (filename) {
return new Promise(function (resolve, reject) {
var shasum = crypto.createHash('sha1');
fs.stat(filename, function (err, stats) {
if (err) return reject(err);
shasum.update('blob ' + stats.size + "\x00");
var stream = fs.createReadStream(filename);
stream.on('data', function (data) {
shasum.update(data);
});
stream.on('end', function () {
resolve(shasum.digest('hex'));
});
stream.on('error', function (error) {
reject(error);
});
});
});
}
gitSHA1(filename).then(function (shasum) {
console.log(shasum);
}).catch(function (e) {
console.log(e);
});
=IMPORTXML("http://kakaku.com/item/xxxxx/", "string(//*[@id='minPrice']/a/span)")+0 みたいにすればいい。
Google Spreadsheet 側は ¥ マークとかカンマとかを無視して数値解釈してくれる。ただ、+0 をつけないと SUM() できない。
これで最安構成の合計金額をすぐだせます。
IMPORTXMLは2時間のキャッシュがあるそうですがこの用途では問題にはなりませんね。
https://github.com/JetBrains/ideavim ここの Development Environment を読みます。ちょっと冗長なのでまとめると
git clone git@github.com:JetBrains/ideavim.git
普通の IntelliJ IDEA 13.1+ (Community or Ultimate) で File → Open… → clone したディレクトリまで移動して Choose
コードを変える。
これで、Run → Run 'IdeaVim' すれば別インスタンスの IntelliJ が起動する。初回起動時は、初回起動のウィザードがでるが、全部適当でいい。途中でプラグインを有効にするか?みたいな画面がでるけど無視でいい (デフォルトで IdeaVim が有効になった状態で起動するので、余計なことはしない)
このインスタンスで挙動を確認する
常用するには一旦パッケージにする (jar にする) 必要がある。ant dist すればできる、ということになっている。
はずなんだけど、build.properties の idea.download.url を最新のやつにしないとダメだった。
できた out/build/IdeaVim.jar を、常用している IntelliJ の Preferences → Plugins → Install plugin from disk… で読みこむ。
一回インストール済み IdeaVim を削除したほうがいい気がして削除してからやったけど、別にいちいち削除する必要ないみたい。