2019/11/21

electron v7 以降は Raspberry Pi にデフォルトでインストールできない

Raspberry Pi で electron をインストールしようとすると以下のように落ちてしまいました。

```
> electron@7.1.2 postinstall /home/pi/test/node_modules/electron
> node install.js

(node:5861) UnhandledPromiseRejectionWarning: HTTPError: Response code 404 (Not Found)
    at EventEmitter. (/home/pi/test/node_modules/got/source/as-stream.js:35:24)
    at EventEmitter.emit (events.js:210:5)
    at module.exports (/home/pi/test/node_modules/got/source/get-response.js:22:10)
    at ClientRequest.handleResponse (/home/pi/test/node_modules/got/source/request-as-event-emitter.js:155:5)
    at Object.onceWrapper (events.js:300:26)
    at ClientRequest.emit (events.js:215:7)
    at ClientRequest.origin.emit (/home/pi/test/node_modules/@szmarczak/http-timer/source/index.js:37:11)
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:583:27)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:115:17)
    at TLSSocket.socketOnData (_http_client.js:456:22)
(node:5861) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:5861) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
npm WARN saveError ENOENT: no such file or directory, open '/home/pi/test/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/home/pi/test/package.json'
npm WARN test No description
npm WARN test No repository field.
npm WARN test No README data
npm WARN test No license field.

+ electron@7.1.2
added 87 packages from 91 contributors and audited 104 packages in 22.813s
found 0 vulnerabilities
```

2019/11/19

node-ffi 公式は node 12 でビルドが通らない

node から直接Cのライブラリを呼び出せる [ffi](https://www.npmjs.com/package/ffi) というライブラリを
インストールしようとしたところ、以下のようなエラーが出てインストール出来ませんでした。

```bash
`gutter: false;
$ npm install --save ffi

> ref@1.3.5 install /home/yusuke/ffi_sample/node_modules/ref
> node-gyp rebuild

make: Entering directory '/home/yusuke/tmp/node_modules/ref/build'
  CXX(target) Release/obj.target/binding/src/binding.o
../src/binding.cc: In function ‘Nan::NAN_METHOD_RETURN_TYPE {anonymous}::WriteObject(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/binding.cc:222:43: error: no matching function for call to ‘v8::Value::BooleanValue()’
   bool persistent = info[3]->BooleanValue();

... 省略

gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:210:5)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)
```

依存している [ref](https://www.npmjs.com/package/ref) というライブラリのビルドに失敗しているようです。

この `v8::Value::BooleanValue()` 等の参照関数はだいぶ前から deprecated だったようです。
そして、node v.12 でついに削除されました。
そのため、node v.12 以降ではビルドが通らなくなってしまったのです。


### 解決策(一時的な)
幸いなことに、この問題は既に PullRequest として報告されていました。

2019/10/26

Electron のデフォルトでは Spectron が正しく動作しない

@Electron 7.0.0
@Spectron 9.0.0

[electron-quick-start](https://github.com/electron/electron-quick-start) に [mocha](https://mochajs.org/) と [spectron](https://electronjs.org/spectron) をインストールして、簡単なテストを走らせてみました。
すると、以下のようなエラーが。

```
  1) Application launch
       shows an initial window:
     TypeError: waitUntilWindowLoaded Cannot read property 'isLoading' of undefined
      at waitUntil(, ) - application.js:263:17
```

実際に走らせたのは以下のコードです。
2019/09/11

[SQL] ウィンドウ関数で累積和を計算する方法


| id | date | profit |
|--:|-----------:|-----:|
| 0 | 2019-03-01 | 1000 | 
| 1 | 2019-03-04 |  500 | 
| 2 | 2019-04-05 | -300 | 
| 3 | 2019-05-01 |  100 | 

上記 table1 から profit の累積和(cumlative_profit)を求める QUERY は以下私は MariaDB 10.3.10 で動作確認しましたが、「達人に学ぶSQL徹底指南書 第2版」によると、主要なDMBSで動作するとのこと。。

```sql
SELECT *,
       SUM(profit) OVER W AS cumulative_profit 
FROM   table1
WINDOW W AS (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
ORDER BY date;
```

これは、以下のように書いたのと同等。
```sql
SELECT *,
       SUM(profit) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_profit 
FROM   table1
ORDER BY date;
```

最近読み終わったのだけど、SQL に関しては以下の本が秀逸。
もちろん、ウィンドウ関数の使い方もとてもわかりやすく書いてある。
お勧め。

2019/06/24

io.grpc.ManagedChannelProvider$ProviderNotFoundException が発生した時の対処方法

[Google Photos API](https://developers.google.com/photos/) の Java クライアントライブラリを使おうとしたところ、以下のようなエラーが出てしまいました。

```
io.grpc.ManagedChannelProvider$ProviderNotFoundException: No functional channel service provider found. Try adding a dependency on the grpc-okhttp, grpc-netty, or grpc-netty-shaded artifact
```

> Try adding a dependency on the grpc-okhttp, grpc-netty, or grpc-netty-shaded artifact

とのことなので `ManagedChannelProvider` の実装が必要なことはわかりました。
が、「どうやって指定するのよ…」と悩むこと小一時間。

2019/06/08

Windows に python-lzo をインストール

@Windows 10 Pro 64bit

[LZO](http://www.oberhumer.com/opensource/lzo/) というアーカイブ系ライブラリを Python でラップしてくれるパッケージに
[python-lzo](https://pypi.org/project/python-lzo/) があります。

Linux では pip で一発インストール可能なのですが、Windows ではエラーが出てしまいインストールできません。

```shell
`gutter: false;
> pip install python-lzo
Collecting python-lzo
  Using cached https://files.pythonhosted.org/packages/af/60/41f17f56c920a956f1d4b9f04f9755c045b2b06b9dd933b33cdd37ab9fd7/python-lzo-1.12.tar.gz
    ERROR: Complete output from command python setup.py egg_info:
    ERROR: Traceback (most recent call last):
      File "", line 1, in 
      File "C:\Users\yusuk\AppData\Local\Temp\pip-install-jzhjob69\python-lzo\setup.py", line 46, in 
        raise Exception("please set LZO_DIR to where the lzo source lives")
    Exception: please set LZO_DIR to where the lzo source lives
```

公式の Issue によると、これは仕様で、自身でコンパイルしないといけないようです。

> 参考
>
> [unable to install python-lzo using "pip install python-lzo" on Windows · Issue #5 · jd-boyd/python-lzo · GitHub](https://github.com/jd-boyd/python-lzo/issues/5)

2019/05/16

VSCode で Ctrl が Ctrl+CapsLock になってしまう場合の対処方法

Ubuntu 18.04 LTS で [Visual Studio Code](https://code.visualstudio.com) を使っていたところ、Ctrl + S を押してもセーブが出来ませんでした。

ステータスバーを見てみると "(Ctrl+CapsLock) was pressed" の文字が。

2019/05/14

Ubuntu 18.04 でキーボードレイアウトが突然変わってしまった

先日のアップデート後だと思うのですが、キーボードレイアウトが英字キーボードになってしまいました。

Mozc の `Show Keyboard Layout` で確認してみると、確かに英字キーボードになっています。
2019/04/03

コマンドラインから Android emulator を起動しようとしたら "Missing emulator engine ..." が出てしまった場合の対処方法

emulator 28.0.25.0 (build_id 5395263) on Ubuntu 18.04


久しぶりにコマンドラインから Emulator を起動してみると以下のようなエラーが。(Android Studio から起動した場合は問題なく起動しています)

```console
`gutter: false;
$ emulator -avd Pixel_2_API_28
PANIC: Missing emulator engine program for 'x86' CPU.
```

調べてみると、2017年3月の v25.3.0 以降、emulator コマンドのパスが変わったらしい2年もコマンドラインから Emulator 起動してなかったのか
2019/04/02

[Python] venv のプロンプトを任意のものに変更する

@Python 3.6.7

Python2 系も使うことが無くなってきたので、遅ればせながら [virtualenv](https://virtualenv.pypa.io/en/latest/) から [venv](https://docs.python.org/ja/3/library/venv.html) に移行してみました。

調べてみると、venv では virtualenvwrapper のような一元管理を使うのではなく、プロジェクト直下に `venv` というディレクトリを作って管理したほうが良いと書いてあるサイトがちらほら。

> 参考
>
> [venv: Python 仮想環境管理 - Qiita](https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e)

2019/02/27

RTNETLINK answers: File exists が出てしまった時の対処方法

@Ubuntu  18.04.1 LTS

一度 DHCP で IPアドレスを取得してしまったネットワークデバイスを静的アドレスに変更すると、以下のようなエラーが出ることがあります。

```console
`gutter: false;
$ sudo ifup eth0
RTNETLINK answers: File exists 
Failed to bring up eth0
```

これを解消するには、登録されているIPアドレスを一度消去してやります。

```console
`gutter: false;
$ sudo ip addr flush dev eth0
```

> 参考
>
> [networking - Solving “RTNETLINK answers: File exists” when running ifup - Raspberry Pi Stack Exchange](https://raspberrypi.stackexchange.com/questions/13895/solving-rtnetlink-answers-file-exists-when-running-ifup/51947#51947)