lov

lov をリリースしました。

相変わらずごちうさにハマってます。ラグです。

先ほど、twitterの#ごちうさ版深夜の真剣お絵描き60分一本勝負ハッシュタグに投稿されたイラストに溺れられるサイト lov をリリースしました。

E(絵)を探す日常のお供に、どうぞ、よしなに。

lov – http://lov.ragg.me/
Ragg-/lov on GitHub

サポートは @_ragg_で受け付けてます。

続きを読む

Electron v0.35.0が出た

久しぶりにElectronを触ったらv0.35.0が出てたみたいですね。
このv0.35.0でElectronモジュールのrequireに仕様変更があったみたいでelectron-boilerplateelectron-kitがそのままだと動かなくなりそう。

現状だとrequire("browser-window")としても正常に動くしdeprecatedも出ないので、しばらくは古いモジュール名もサポートするということでしょう

変更点

この変更についてv0.35.0のChangelogには以下のように書かれています。

Add electron module which includes all public APIs.

https://github.com/atom/electron/releases/tag/v0.35.0

あたらしくelectronというモジュールが追加され、今までrequire("browser-window")などとしていたクラスは
このモジュールから利用できるようになったようです。

ElectronのAPIドキュメントもこれに合わせて更新されていて、例えばBrowserWindowは以下のように
electronモジュールのBrowserWindowプロパティから取得するようになっています。

const BrowserWindow = require('electron').BrowserWindow;

(というかAPIドキュメントが知らない間にES2015の書き方になってた)

バグ?

と、モジュールの読み込み方が変わったようですが、変な挙動を見つけました。

electron-kitを更新してから気づいたのですが、Rendererプロセスで読み込まれたモジュール内でrequire("electron")すると読み込みに失敗するようです。

require electron cant resolve

これが仕様じゃないといいんだけど、もし仕様だったら外部モジュールだけ古い書き方が残り続けるなんとも気持ち悪い感じになるから嫌だなぁ…
electron-kitのこのエラーは割とすぐ直すと思います。

Electron >= v0.35.0を使う方やこれからElectonを初めて古い情報漁った方は気をつけてください。

MikuMikuEffect 配布エフェクト覚え書き

かなり唐突なのだけど、これから必要になりそうなのでニコニコなどで配布されているMME用エフェクトをつらつらと書いていく。
お世話になりそうなエフェクトをセレクト。

[JavaScript] Arrow Functionは普通のFunctionじゃない

という旨の悲しい出来事があった。
こんな悲しい思いを何度もするのは御免なので Arrow Functionについて調べてみた。

TL;DR

ArrowFunction == Function not === Function
普通のFunctionと異なるところ

  • アロー関数のthisには関数が宣言された時のスコープのthisが束縛される
  • アロー関数内でarguments変数は使えない
  • アロー関数はコンストラクタとして使えない
    • アロー関数をnewでコールするとx => x is not a constructorのようなエラーが起きる

ちなみにtypeof (x => x)"function"となりますので、コンストラクタを受け取ってよしなにする関数の使用・実装の際にはご注意ください。

以下のコードでアロー関数か通常の関数かが大雑把に推測できます。
(prototypeプロパティが削除された関数とprototypeプロパティが設定されたアロー関数の区別はつかない)

function isArrowFunction(fn) {
    return typeof fn === "function" && fn.prototype === void 0;
}

isArrowFunction result

これを読んだあなた。どうかこの罠にかからないでください。それだけが私の望みです。

発端

発端はテストツールとして使い始めたMochaだったかSinonだったかのコールバックにどんなパラメータが与えられるのか調べていた時に以下のコードをコールバックに渡した時に起きた。

() => console.log(arguments);

このコールバックが実行された時にUncaught ReferenceError: arguments is not definedというエラーが起きた。
そんなバカな、関数内でスペルミスもないのにargumentsが使えないなんて…と思い以下のツイートをした。

このツイートをみた @gaogao_9 さんから以下の様な情報が

ということで、アロー関数は通常の関数と違い、arguments変数が使えないらしい。
(代わりにRestパラメータ使うといいよとも教えてくれた)

ニワカESer2015のメモでした。

参考

アロー関数が実装された – JS.next