食洗機の分岐水栓をDIY工事はあきらめてお願いした(結果的によかった)

 食洗機の『プチ食洗(NP-TCR3)』を購入しました。
食洗機にはビルトイン・据え置き水栓・据え置きタンク式、がありますが、購入したのは水栓をつなげる必要がある機種です。
わたしが購入前に参考にしたブログでは『買って取り付ければ終了だよ』で、『分岐水栓を取り付ける必要があるけれど自分でできるし簡単だよ』という感じでした。
おおむねそのとおりではあるものの、わたしの場合はイロイロあって業者さんに頼むことにし、結果的に頼んでよかった、と思ったのでその話を。





ちなみに、のちに出てくる蛇口と分岐水栓は以下。
蛇口 takagi JA200LN-NNDK01
分岐水栓 JH9024



# 設置前の準備
設置場所が必要なのもそうですが、ちょこちょこと以下のような必要なものが出てきます。

「分岐水栓」以外は、近所のスーパーやドラッグストアで当たり前に売っているようなものばかりなので、本体を買ってからつどつど集めるとかでも十分だと思います。
以前、3Dプリンタを買ったときは、必要な周辺小物の多さに驚き苦労しました。
それからすれば本当に少なく、3Dプリンタのように通販でしか手に入らないような専用品もほぼありません。
とはいえあらかじめ買っておいたほうが、設置と動作確認がスムーズです。

必要なもの
- 分岐水栓
- 食洗機専用洗剤

場合によって必要
- 電源延長コード
買った食洗機の電源コードは1mくらいでした。
食洗機の設置場所はおおむね水道の横、炊飯器等の家電から離れているため、我が家の場合は必要でした。

本体を中古で購入する場合、
- 給水ホース
- 排水ホース
がついてくるかどうか確認しておくといいです。
なければ家電量販店で買えるようです。


# なぜ水場工事業者さんに頼まなければならなかったか
『DIYでやってみて、だめだったら業者にお願いしよう』というのもアリだと思います。
(それで水道を壊したりしたら余計に出費がかさむことにはなりますが。)
というか私のばあい、その方針でやってみて、工事をする前に降参した流れになります。

## 1. 分岐水栓のとりつけには専用の工具が必要
購入前に参考にした、同じ蛇口と分岐水栓のブログ記事などでは、言及がなくて驚きました。

分岐水栓の取扱説明書を見ると、分岐水栓のとりつけには『「トルクレンチ」が必要』とあります。
このトルクレンチが厄介で、必要なのは「水道工事用の10Nのトルクレンチ」であるのに対し、市販されているのは車用の「40N以上のトルクレンチ」ばかりです。
水道工事用の10N前後のトルクレンチは、ホームセンタではとりあつかいがありません。
Webで見てみると、どうやら6000円スタートの業務用キットには含まれているようですが、あきらかに業務用で、Web上で軽く調べるだけでは、詳細情報を知ることができません。

どうやら、購入前に参考にしたブログ記事などの方々は適当に締めているようです。
家庭で特殊めな10Nのトルクレンチを持っていたのかもしれませんが。
また後に書く工事の様子を見た限り、それでも多くの場合はうまく行くのかもしれません。
専用工具で適切な強さで締める必要があるナットを、素人の自分がやって、水が飛び散って止まらないなどとなったら目もあてられないので、業者にお願いする判断をしました。

## 2. 蛇口や水道管が悪くなっていた場合に対処できない
分岐水栓を設置する水まわり工事をお願いするにあたって、ネットなどで水道工事は悪い業者に引っかかると見積もり以上のすごい額を請求される、という話をどこかで読んだことがあったので、事前にいろいろ確認しました。
その、電話口での概算見積もりの段階で「見積もりから大きく外れる事情にはどんな場合がありますか」と訊いてみたところ、「水道の蛇口が経年劣化でダメになっていて、蛇口の交換等が必要になってしまう場合があります」との回答をいただきました。

確かにDIYでそうなったら、蛇口の交換になって(まあそれもがんばればDIYできる範囲ではありますが)手に負えないだろうなと思いました。
(がんばれる人もいると思いますが、わたしはやめておきたい)

## 3. 蛇口が固着して素人工事が難しい場合がある(私の場合)
実際に工事をお願いして、作業者の方がとりつけ工事をしているのを間近で見学させてもらいました。

そのときに起こったことなのですが、蛇口の「化粧リング」が固着して外れませんでした。
この化粧リングは、ナットやパッキンのように固く締めて水漏れを防ぐような部品ではなくて、ネジ溝はあるけれど固定用で「かぶせてあるカバー」程度のものです。
しかし(それゆえなのか)、水道のカルキで固まってしまっていました。
わりと強めに蛇口を揺すったりしてみたものの、通常のレンチでは、化粧リングが外れず。
最終的に「蛇口に傷がついてしまいますが良いですか?」という確認のあと、見たことのないゴツめのレンチで無理やりねじ開けてもらいました。
(借家なので退出料に上乗せになるかもしれません。言われないと気づかない程度の跡なので大丈夫だろうだとは思っていますが。)

なお固着していたのは半分内側みたいな位置の部品だったため、日頃の掃除の有無は、固着の発生にあまり関係ないと思います。
住んでいるのは、わたしが入居した時点で築3年程度、住み始めてから2年程度なので、蛇口は設置してから長くて5年くらいのはずでした。


# 工事をお願いする際の注意

- 予備の部品とかを持ってきていないかも
これは、かなり推測混じりですが。
分岐水栓の付属品はあらかじめ確認しておいたほうがよいです。
工事中に『パッキンがないかも』という話が出て、そのときにけっこう真剣に探して、すぐに手持ちがあるような話にはなりませんでした。
こちらは確認したわけでないですし、汎用の水栓などは持ってきているのだと思います。
しかし分岐水栓は種類も多いので、部品の代替えがある期待はしないほうがよいかもです。

- 分岐水栓はあらかじめ買っておいて大丈夫
というか、分岐水栓に種類がたくさんあるのもあって、あらかじめ買っておかないと在庫や手持ちにない場合があるのかもしれません。
私の場合、上記のとおりあらかじめ買った状態で工事のお願いをしたので、そのへん持ち込みしてもらって別途購入できるのか等は、確認していません。

- 分岐水栓の取扱説明書をなくさない(工事経験のない機種かも)
自宅の蛇口はメーカがtakagiだったので、それなりにメジャな蛇口なのではと思っていたのですが、そうでもなかったようです。
作業者の方は、分岐水栓についてきた取扱説明書を見ながら作業、という感じになっていました。
分岐水栓の取扱説明書のほうに蛇口側のことについてはそれなりに書いてあったので蛇口の取扱説明書は不要でした。
(でもあるなら用意しておいたほうが良いと思います。)

WiFiルータ買い替えで、通信環境が改善(Archer AX20 WiFiルータ買い替えで、WiFi6対応子機でなくても遠くが高速になりました)

 Archer AX20 WiFiルータを購入しました。

[Aterm WG2200HP]を使っていたのですが、もうそろそろ数年になるので買い換えよう、という軽い動機です。

NEC ルータの設定画面が重い、というのもちょっとあります。

(設定画面なんて何もなければ数年は触りませんが、触るのは何かあったタイミングなので、遅いとストレスがある)

結果として、期待していなかったのですが思いがけずWiFi環境が改善して驚きました。

 

 


 

[Archer AX20 新世代Wi-Fi 6 無線LANルーター 1201+574Mbps MU-MIMO W PA3 Dバンド]

TP-Linkのルータは同じ製品に2つ以上の名前が ついているようで混乱しますが。

設定画面では[ AX1800 Wi-Fi 6 Router]と名乗っています。

 



 少し困ったのは、いちばん最初にWANにPPPoE接続でインターネットにつながるまで、時間がかかりました。

2回ほど接続失敗し、最終的に再起動などを試しているうちに接続されました。

以下、開封写真。

こんな感じで入っています。

最初、箱のサイズが大きいなと思ったのですが、面の大きさでは、NECやバッファローの箱型のルータの1.5倍サイズがあります。(厚みは少し薄い)


GPLライセンスの告知。

しっかりしてるの好感がもてます。

入っているLANケーブルはCET5eでした。別にそれで困らないとは思いますが、ウチではすでにあるCAT6ケーブルを使いました。

裏側。

裏側のネジ口ですが、写真で見て上下にハマるミゾがあり、左右方向にはありません。

なので壁掛けの際、アンテナが横に向くように釣ろうとすると、ひっかかりがなくてオチてしまうかもしれません。

またミゾは浅いので、壁掛けのフックでは厚みで うまくひっかかりません。

ダルマ型画鋲あたりが必要です。


 LANとWANの口。

写真では見づらいですが、電源含むボタン類もこの面に集まっています。

LEDがボタン一つで消灯できるのは嬉しかったです。 


電波強度について

家のドア3つ隔てた家の端でWiFi通信して、画像ダウンロード表示がストレスない程度に高速になりました。

(以前のNECルータを使っていたときは、この距離ではワンテンポあって、複数枚画像のあるページでは読み込みが10秒以上とか、Twitter読み込みに失敗することもありました)


我が家にWiFi6子機はなく、 経年で故障前にしておこうくらいの買い替えでした。

前のNECルータも5Ghz対応済みの機種で、WiFi6子機でなければ他のWiFi通信条件は同じだろうという感じです。

 

なので、高速化などは特に狙っていなかったのですが、WiFi環境が改善したため、思いがけず良い買い物でした。


spectronの新しい記法 (WebdriverIO v5対応その2)

electron9~10あたりで、UIテストツールであるspectronのバックエンドのwebdriverioが、v4から v5に更新されました。

呼び出しが非同期に変化して、これまでのメソッドチェーンを使う記法が動作しなくなったため、テストの全面書き直しが必要となります。

webdriverio自体に実践的なサンプルが見つからなかったりして難儀しましたが、いろいろ調べて、最終的に参考にしたのはwebdriverioのドキュメントでした。


https://webdriver.io/docs/api.html

```

it('can handle commands using async/await', async function () { const inputElement = await $('#input') let value = await inputElement.getValue() console.log(value) // outputs: some value })

```

 

以前のspectron(WebdriverIO v4のメソッドチェーン)

```

    it("input basic test", function() {
        return this.app.client.waitForVisible('#query-area__query-input__input')
                .waitForEnabled('#query-area__query-input__input')
                .clearElement('#query-area__query-input__input')
                .setValue('#query-area__query-input__input', "Bonan matenon!")
                .getValue('#query-area__query-input__input')
                .then(function(text){assert(text === 'Bonan matenon!')})
    })

```

新しいspectron(WebderiverIO v5のasync/await)

```

    it("input basic test", async function() {

        const inputElement = await this.app.client.$('#query-area__query-input__input');
        let text;
        text = await inputElement.getValue();
        console.log(`before:'${text}'`);
        await inputElement.waitForEnabled()
        await inputElement.clearValue()
        await inputElement.setValue("Bonan matenon!")
        text = await inputElement.getValue();
        console.log(`after:'${text}'`);
        assert(text === 'Bonan matenon!')
        // assert(text === '') // test to test (falure)
    })

``` 

今回書き換えたソース:

https://github.com/MichinariNukazawa/lina_dicto/blob/master/lina_dicto/test/input_ui.js


## Element がないことをテストする処理に時間がかかる?

```

        // このnot existテスト部分で5000msec近くかかるようだが詳細不明
        isExisting = await preprintElement.isExisting();
        assert(! isExisting); // not exist

```


以上です。

spectronの新しい記法 (WebdriverIO v5対応その1)

electronのUIテストであるspectronのバックエンドのwebdriverioが、v4から v5に更新されました。

呼び出しが非同期に変化して、これまでのメソッドチェーンを使う記法が動作しなくなったため、テストの全面書き直しが必要となります。

 


 

 

webdriverio自体に実践的なサンプルが見つからなかったりして難儀しました。

そのうちspectron公式サイトのトップにサンプルが載っているのを発見。

https://www.electronjs.org/spectron

基本のWindow表示テストですが、v4のテストコードを引き写してきた覚えのある手元の同等テストとはあれこれ違う感じです。

引き写したというのはREADME.md のmochaも使ったテストで、これ自体はv5環境下でも動作します。

 https://github.com/electron-userland/spectron

 

ここでは、v5対応の準備運動代わりに、サンプルにいろいろ追加してみました。

 

## CIテストに組み込むのでパスを固定値から自動判定に変更したい

 

```

const electronPath = require('electron') // Require Electron from the binaries included in node_modules.
const path = require('path')

var app = new Application({
    //path: '/Applications/MyApp.app/Contents/MacOS/MyApp'
    path: electronPath,
    args: [path.join(__dirname, '..')]
})

```

 

## assert()でエラーを検出した場合に、最終的に自動で停止してほしい

エラーが起こってcatch節に落ちると、Ctrl+CでKillするまでターミナルに帰ってこない。 

ローカルのターミナルでテストしている限りは少し不便なだけだが、このままではCIに都合が悪い(いずれタイムアウトするだろうが、早く終わらせてエラー通知させたい)。

catch節に落ちた際に、能動的に`app.stop()`を呼ぶことでテストが終了しターミナル操作が帰ってくる。

```

    return app.stop()
}).catch(function (error) {
    // Log any failures
    console.error('Test failed', error.message)
    app.stop() // ++ exit test and return to terminal control.

})

```

 

## assert()でエラーを検出した場合に、ターミナルにエラーコードを返す

サンプルコードのままでは、ターミナルへの戻り値がゼロになっており、CIでエラー検出できない。

 これはassert()ではやらず、タイムアウトで実現した。

mochaテストフレームワークに、非同期テストのために 「done()を呼ばないとタイムアウトになる」という仕組みがあるので、それを利用した。

 

 ```

it("Test for Window", function(done){ // ++ In mocha testing framework
  app.start().then(function () {
    ~
  }).then(function () {
    // Stop the application
 
    done(); // ++ Test result to Success
    return app.stop()
  }).catch(function (error) {
    // Log any failures
    console.error('Test failed', error.message)
    app.stop()
 
    // done(); // ++ Test result `not done()` is Failure, of timeout when catched error.
  })  
}).timeout(4000); // ++ Optional timeout msec (default 2000)

```

実行結果:

```

MN@daisy-bell:lina_dicto/$ ARG=wakeup make test
cd lina_dicto && npm run test test/wakeup

> lina_dicto@0.2.11 test /home/nuka/lina_dicto/lina_dicto
> mocha --require intelli-espower-loader "test/wakeup"



Test failed   # test/wakeup.js:26
 
  assert.equal(title, "lina_dicto - Esperanto / Japanese -xx")
               |                                              
               "lina_dicto - Esperanto / Japanese -"          
 
  1) window

  0 passing (2s)
  1 failing

  1) window:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/nuka/lina_dicto/lina_dicto/test/wakeup.js)
      at listOnTimeout (internal/timers.js:554:17)
      at processTimers (internal/timers.js:497:7)



npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! lina_dicto@0.2.11 test: `mocha --require intelli-espower-loader "test/wakeup"`
~
MN@daisy-bell:lina_dicto/$ echo $?
2

```




 

node12がインストールできない場合 (Ubuntuでnode10がインストールされてしまう)

Ubuntu20.04でnodejsのAPTリポジトリを 設定済みで、リポジトリを 12.xに変更してnode12にしようとしてもなぜかnode10がインストールされる。




まず基本手順は、リポジトリ書き換えでバージョン指定。数字のところを書き換えるだけ。

sudo vim /etc/apt/sources.list.d/nodesource.list

```

deb https://deb.nodesource.com/node_12.x focal main
deb-src https://deb.nodesource.com/node_12.x focal main
```

` sudo apt update` を忘れない。

このあとnodejsの削除・インストールで再インストールを行うと、なぜかnode10がインストールされる。


```

MN@daisy-bell:vscode/$ apt list --upgradable -a
一覧表示... 完了
nodejs/不明 12.19.0-deb-1nodesource1 amd64 [10.19.0~dfsg-3ubuntu1 からアップグレード可]
nodejs/focal,now 10.19.0~dfsg-3ubuntu1 amd64 [インストール済み、12.19.0-deb-1nodesource1 にアップグレード可]

```

 

一覧によるとsudo apt upgrade で更新されるらしいのだが、実際にやってみると壊れた依存関係で失敗する。

`sudo apt remove nodejs-legacy` だけしてもやはり失敗する。

 

```

MN@daisy-bell:vscode/$ sudo apt upgrade nodejs
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 libnode64 : 競合: nodejs-legacy
E: 壊れたパッケージ

```
 

 nodejsを一旦削除し、残ったlibnode64 をautoremove で削除して解決。

 

```

MN@daisy-bell:vscode/$ sudo apt remove nodejs
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libc-ares2 libnode64 nodejs-doc
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージは「削除」されます:
  nodejs
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 158 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 245429 個のファイルとディレクトリがイン
ストールされています。)
nodejs (10.19.0~dfsg-3ubuntu1) を削除しています ...
man-db (2.9.1-1) のトリガを処理しています ...
MN@daisy-bell:vscode/$ sudo apt autoremove
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
  libc-ares2 libnode64 nodejs-doc
アップグレード: 0 個、新規インストール: 0 個、削除: 3 個、保留: 0 個。
この操作後に 30.5 MB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 245419 個のファイルとディレクトリがイン
ストールされています。)
libnode64:amd64 (10.19.0~dfsg-3ubuntu1) を削除しています ...
libc-ares2:amd64 (1.15.0-1build1) を削除しています ...
nodejs-doc (10.19.0~dfsg-3ubuntu1) を削除しています ...
libc-bin (2.31-0ubuntu9.1) のトリガを処理しています ...

```

以上です

 

 

electronの右クリックメニューから選択テキストを使う

lina_dictoにて、選択テキストを右クリックメニューでGoogle検索とGoogle翻訳にかける機能を実装しました。



右クリックメニューはcontextmenuで設定できます。

プロセス間通信がんばってねという記述もありますが、必要ありません。

window.getSelection();の戻り値で取れます。
返り値はオブジェクトなのでtoString()を忘れないよう注意。

Google検索のURLは
`'https://www.google.com/search?q=' + keyword.replace(/\s+/, '+');`
といった感じで生成。

Google翻訳のURL生成
```
    static get_google_translate_url(keyword, src_lang, dst_lang)
    {
        // ex. eo to ja, `https://translate.google.co.jp/#eo/ja/bona`
        const link = 'https://translate.google.co.jp'
            + '/#' + src_lang
            + '/' + dst_lang
            + '/' + encodeURIComponent(keyword);
        return link;
    }

```

ブラウザはOpenにURLを渡すとデフォルトブラウザが開きます。
`require('electron').shell.openExternal(link)`



結果、lina_dictoで使っている右クリックメニューのコードは以下。

```
    static init()
    {

        //! context menu (light click menu)
        var menu = new Menu();

        menu.append(new MenuItem({
            label: 'Copy',
            accelerator: 'CmdOrCtrl+C',
            role: 'copy'
        }));
        menu.append(new MenuItem({
            label: 'Paste',
            accelerator: 'CmdOrCtrl+V',
            role: 'paste'
        }));
        menu.append(new MenuItem({
            label: 'goto google search(external browser)',
            click: function(){
                const keyword = window.getSelection().toString();
                if(0 == keyword){
                    alert("text no selected");
                    return;
                }
                const link = 'https://www.google.com/search?q=' + keyword.replace(/\s+/, '+');
                //const src_lang =;
                //const dst_lang = '';
                //const link = ExternalBrowser.get_google_translate_url(
                //        keyword, src_lang, dst_lang);
                ExternalBrowser.open(link);
            }
        }));
        menu.append(new MenuItem({
            label: 'goto google translate(external browser)',
            click: function(){
                const keyword = window.getSelection().toString();
                if(0 == keyword){
                    alert("text no selected");
                    return;
                }
                const isEsp = Esperanto.is_esperanto_string(keyword);
                const src_lang = (isEsp ? Language.get_code_by_google() : 'ja');
                const dst_lang = ((! isEsp) ? Language.get_code_by_google() : 'ja');
                const link = ExternalBrowser.get_google_translate_url(
                        keyword, src_lang, dst_lang);
                ExternalBrowser.open(link);
            }
        }));

        window.addEventListener('contextmenu', function (e) {
            e.preventDefault();
            menu.popup(remote.getCurrentWindow());
        }, false);

        return true;
    }

```

接写リング買いました


マクロレンズ2万円〜に対して、接写リング1000円〜、だったので試しました。(私が買ったのは3000円くらい)





撮影したのは3Dプリンタの出力物。サイズは2cmちょっとです。





比較として、接写リング無しだとこんな感じです。







eletctronでコマンドライン引数を受け取る (とmacosxの注意点)

eletctronでコマンドライン引数を受け取る場合に、macosx固有の注意点として"-psn_0_xxxxxx"のような引数に対処する必要がある。

daisy-sequenceをデバッグしていて発見。



# よく紹介されるelectronでの引数の受け取り方法

electronで引数にファイルを受け取る時、以下の対応が必要となる。

## electronはデバッグとリリースでコマンドライン引数の数が異なる

デバッグではElectron実行ファイルのパスだけでなく、アプリのmainを入れたjsのパスも引数として渡される。
```
let argv = remote.process.argv;

     if(argv[0].endsWith('lectron')){
        argv.shift();
    }

```
ここで'lectron'とendsWithでマッチしているのは、プラットフォームにより'Electron'/'electron'で先頭大文字小文字の2パターンがあるため。

## electronは OSXでは'open-file' イベントを受ける


electronアプリにGUI上からファイルを渡して開く時、(ファイルをドロップして開く等)macosxではwin/linuxのように通常引数では受け取れないため、以下のコールバックで受け取る。

``` : electronベース(nodeプロセス側)でコールバック受け取り
// MacOSX
global.sharedObject = {'osx_open_file': null};
let openFileHandler = function(event, path) {
    event.preventDefault();
    global.sharedObject.osx_open_file = path;
};
app.on('open-file', openFileHandler);

```
```: electronアプリ(レンダラプロセス側)で上で保存した値を受け取り
     if(typeof remote.getGlobal('sharedObject').osx_open_file === 'string'){
        if(null === arg.open_filepath){
            arg.open_filepath = remote.getGlobal('sharedObject').osx_open_file;
        }
    }

```

# macosxのelectronで引数から"-psn_0_xxxxxx"を取り除く

macosxでリリースしたアプリをダウンロードして起動すると、初回起動時に、
"-psn_0_xxxxxx"のような引数を受け取る場合がある。





これを適切に取り除く必要がある。
```
         if(/^-psn_0_[0-9]+$/.test(arg.open_filepath)){
            // macosxでブラウザからダウンロードしたバイナリを初回起動した際に、
            // 渡される場合のあるコマンドライン引数(ex. '-psn_0_2958034')を除外する。
            console.debug("through for macosx:", arg.open_filepath);
            return true;
        }

```

ただし、初回起動時から引数でさらにファイルパスを渡された場合に、うまく行かないかもしれない。(その場合の引数の順序などの動作は確認していない。)

不明な引数について今回の話に近い報告がされているissue
https://github.com/electron/electron/issues/4403

## テスト方法

なお、macosxでテストする際、「ネットワークからダウンロードしたファイル」のフラグをONにする必要がある。
これには実行ファイル(の配布zip)をchrome にドロップすると良い。ドロップしたファイルがダウンロード扱いされる。

mi band4について(元mi band3ユーザとして)

mi band4を買いました。
元はアクティビティトラッカーを着けて使ってみようと、初めてのバンドとしてmi band3を買い、使っていました。ところが去年の年末あたり外出した際に無くしてしまい、しばらくバンド無しで過ごしていました。(純正シリコンバンドから本体がすぽんと抜けてしまったようで、気づいたら無くなっていました。)
こういうときに「あー残念」で済むのが安いバンドの良いところです。

mi band4登場は知っていましたが、今回購入するにあたって、事前調査で自分の用途(歩数と心拍が取れていればいい)では、あまり差がなかったため、今回もmi band3でいいやと思っていました。ですが、もう取扱がほとんど無いようで、差額も500円いかないようだったので、せっかくだからとmi band4にしました。買ったのは日本版(smart と付いている方)ではなくglobal版です。

で、mi band3と比較しての感想ですが。
- 純正バンドが固くなった気がする。最初、はめていて違和感があった。今は多分慣れた。
-  やっぱりカラー画面である必要はなかった。カラーだから困ったりはしないが。
- 音楽再生機能はセットアップ時に自動接続されなかったようなので使っていない。今度暇なときにでも試そうと思ってます。
-  純正アプリは相変わらず。心拍歩数以外もgoogle fit連携して欲しい。
- 画面の明るさ調整って3にあったっけ? 4にはある。
- 3に無かった、座りっぱなし防止タイマみたいな機能が増えた? 素晴らしい。
 睡眠や心拍の測定精度が良くなったのかは正直自分にはわからないので、感想はそれ以外になります。

「座りっぱなし防止」が、事前調査で気づかなかった(多分)mi band4の新機能で、これがPCデスクワークの多い自分にはありがたいし、すごく面白いです。mi band4にしてよかった。

3Dプリンタを買いました(ANYCUBIC PHOTON)

3Dプリンタを使おうと思って、ANYCUBIC PHOTONを買いました。(Sやzeroじゃない安いやつです。)光学式です。
3万円で買えます。3Dプリンタ本体が安く買える、良い時代になりました。



今はBlenderで描いているフィギュアのテスト出力に使っています。あとは、文ッ字フリマで出す製品にも使う予定。


以下、開封写真。




箱に入っている付属品一式です。

手袋とマスク(一応程度)もついています。


下面にファン。




容器内部もクッションが充填されています。



内部クッションの中に印刷土台(宙に浮く方)が埋まっています。

レジンバットです。あらかじめフィルムが貼られていて、そのまま使い始められます。





マスクは後でもっとちゃんとしたものを買いました。


ところで3Dプリンタはレジン毎に性質が異なるためパラメタ(露光時間)の調整が必要で、Photonの先達の方々はテスト出力をいろいろ工夫したりしていたそうなのですが、私が買ったPhotonには、USBの中にサンプルデータ他の諸々と一緒に、露光時間をテストするための特別なテスト出力データが入っていました。

また本体も、先達は外から光が入らないように工夫していたそうなのですが(写真を見ると外板が透明)、今はいちおう不透明な外板がはめられています。



3Dプリンタは1000万とか100万円スタートだったものが、今はPhotonのようにやすければ
3万円台スタートと大変安くなりました。
とはいえ本体だけで始められるわけではなくて、いろいろ 購入する必要があります。主に周辺の消耗品と、レジンです。



Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する

 Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。   以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。   ラスタライズ変換...