tag:blogger.com,1999:blog-54785266946706599252024-03-13T21:17:09.035+09:00Ubuntu忘備録Ubuntu Linuxのデスクトップとサーバーについて扱います。MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.comBlogger208125tag:blogger.com,1999:blog-5478526694670659925.post-37612998753319018072023-09-24T13:04:00.004+09:002023-09-24T13:04:51.880+09:00Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する<p> Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。</p><p> </p><p>以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。</p><p> </p><p>ラスタライズ変換にはImageMagickの convert が使用でき、DPI的な設定 -density 600 でサイズ調整している。 <br /></p><p><br /></p>` <span style="font-family: courier;">convert -density 600 $filename.svg $filename-ss.jpg </span>`<br /><p> </p><p>元画像はこちら</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC1EySwiwxJzKy04MjJyBOyieG6iBUxIHabRX4TGYUxk1LaMj73QCTfvz-NKhNoXQ8WjgDg0IIqYb38ReMqcy_EoJrmhwVuQRpZTxzuaHSLgJv2i2bw4tudFOwh-UuLoVdfaYTgJDKWeFkqERaoNyGEE7tNsp7x5DV75kBa1YsU13Z02Eti5u_Qg0lzCY/s2645/Screenshot%20from%202023-09-24%2012-31-08.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1565" data-original-width="2645" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC1EySwiwxJzKy04MjJyBOyieG6iBUxIHabRX4TGYUxk1LaMj73QCTfvz-NKhNoXQ8WjgDg0IIqYb38ReMqcy_EoJrmhwVuQRpZTxzuaHSLgJv2i2bw4tudFOwh-UuLoVdfaYTgJDKWeFkqERaoNyGEE7tNsp7x5DV75kBa1YsU13Z02Eti5u_Qg0lzCY/s320/Screenshot%20from%202023-09-24%2012-31-08.png" width="320" /></a></div><br /> 変換結果はこのようになってしまう。 <br /><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWOZb4kCGtfec4a2fUUchmWEJ8yCwiRE-M1rXaoX9SzT2ZGA7wRfRbw-xKRpDCSQsUn8OYntgPN5IKffDfKMoXRZgTpVNoxbM-22X5S01yNojqW5z-m1FgitP7PqtySz4LfZexAdHVCrB7NVCPr7M9JZf-ac6b7aOPLtP5OD3uA4zrG4NA49Z2mAL0y1Q/s2645/Screenshot%20from%202023-09-24%2012-31-20.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1565" data-original-width="2645" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWOZb4kCGtfec4a2fUUchmWEJ8yCwiRE-M1rXaoX9SzT2ZGA7wRfRbw-xKRpDCSQsUn8OYntgPN5IKffDfKMoXRZgTpVNoxbM-22X5S01yNojqW5z-m1FgitP7PqtySz4LfZexAdHVCrB7NVCPr7M9JZf-ac6b7aOPLtP5OD3uA4zrG4NA49Z2mAL0y1Q/s320/Screenshot%20from%202023-09-24%2012-31-20.png" width="320" /></a></div><p></p><p>30枚の画像をSVGからJPGへ変換した結果、6枚ほど結果が明らかにおかしい。<br /> </p><p>失敗しているものを拡大した抜粋。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcjA8vhh1_x5PWDEuyxhvJSGvwpvvAxyYxqzcZW_gNFqnVbBKNPWXbcb-oBwOh37hXhzC0sPQVuB4yokwGmLJaxtiNS9aGZisWUtXVreCGM3yCiQwAWqfW9EeydxS1OcnhQwexcoYdvtzEdEb4VcevZZaiTjsd-PRR3W9OUerF36cnxDAubYvOZPFBTX4/s1339/Screenshot%20from%202023-09-24%2012-35-09.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="919" data-original-width="1339" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcjA8vhh1_x5PWDEuyxhvJSGvwpvvAxyYxqzcZW_gNFqnVbBKNPWXbcb-oBwOh37hXhzC0sPQVuB4yokwGmLJaxtiNS9aGZisWUtXVreCGM3yCiQwAWqfW9EeydxS1OcnhQwexcoYdvtzEdEb4VcevZZaiTjsd-PRR3W9OUerF36cnxDAubYvOZPFBTX4/s320/Screenshot%20from%202023-09-24%2012-35-09.png" width="320" /></a></div><p></p><p><br /></p><p>真っ白で明らかに変換できていないものもあれば、circle要素などSVG画像から一部が抜け落ちてしまっているものもある。</p><p> </p><p>また上のような真っ白な変換失敗や大きなパーツの欠損は明らかに見てわかるのでまだ良いが、小さなパーツの漏れ欠けがあるかもしれないし、そうなると今回のように多数の画像を扱っている中では見落としが起こると思う。<br /></p><p> </p><p>コマンドラインでバッチ処理したのだが、いくつかはエラーが通知されている。 </p><p>```</p><div data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: #17191a; --darkreader-inline-color: #c8c3bc; background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">MN@daisy-bell:MagickCircle/$ bash a.sh </span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">convert-im6.q16: memory allocation failed `</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">' @ error/draw.c/CheckPrimitiveExtent/2274.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">convert-im6.q16: non-conforming drawing primitive definition `circle'</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> @ error/draw.c/RenderMVGContent/4405.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">convert-im6.q16: memory allocation failed `</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">' @ error/draw.c/CheckPrimitiveExtent/2274.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">convert-im6.q16: non-conforming drawing primitive definition `circle'</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> @ error/draw.c/RenderMVGContent/4405.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">convert-im6.q16: memory allocation failed `</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">' @ error/draw.c/CheckPrimitiveExtent/2274.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">convert-im6.q16: non-conforming drawing primitive definition `circle'</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> @ error/draw.c/RenderMVGContent/4405.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">convert-im6.q16: memory allocation failed `</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">' @ error/draw.c/CheckPrimitiveExtent/2274.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">convert-im6.q16: non-conforming drawing primitive definition `circle'</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> @ error/draw.c/RenderMVGContent/4405.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">convert-im6.q16: memory allocation failed `</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">' @ error/draw.c/CheckPrimitiveExtent/2274.</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">convert-im6.q16: non-conforming drawing primitive definition `circle'</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> @ error/draw.c/RenderMVGContent/4405.</span></div></div><p></p><p>``` <br /></p><p>ただ、 `<span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> memory allocation failed</span>` とはいうものの、メモリはかなりとっているのだが。 <br /></p><p>``` /etc/ImageMagick-6/policy.xml<br /></p><div data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: #17191a; --darkreader-inline-color: #c8c3bc; background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;"><</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #60a4d8; color: #569cd6;">policy</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">domain</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"resource"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">name</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"memory"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">value</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"8GiB"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;">/></span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;"><</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #60a4d8; color: #569cd6;">policy</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">domain</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"resource"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">name</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"map"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">value</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"8GiB"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;">/></span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;"><</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #60a4d8; color: #569cd6;">policy</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">domain</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"resource"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">name</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"width"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">value</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"128KP"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;">/></span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;"><</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #60a4d8; color: #569cd6;">policy</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">domain</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"resource"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">name</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"height"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">value</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"128KP"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;">/></span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;"><</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #60a4d8; color: #569cd6;">policy</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">domain</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"resource"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">name</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"area"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">value</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"2048MP"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;">/></span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;"><</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #60a4d8; color: #569cd6;">policy</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">domain</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"resource"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">name</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"disk"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe;">value</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc;">=</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178;">"16GiB"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #988f81; color: grey;">/></span></div></div><p>```</p><p> </p><p>小さなサイズで出力してみる。</p>``` <br /><p>convert -density 600 $filename.svg $filename-ss.jpg <br /></p><p>convert -density 90 $filename.svg $filename-3ss.jpg<br /></p><p> ```</p><p> </p><p> </p><p>小さなサイズで出力すると、たしかに結果が改善する。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHYmwAtm43qNdDhw4am27Pi3g-Fj-7JX-H7WdslMV5fo0xGxI1hUl88cJ2pzn2s5WJnZ-U1KNcheg7fMf9rZiWLMVOgrLswwdctZmXSDVS5KVKH1PYRc9--fAyCdxfBL0ZVapGBok3zivtONng1N_47ObfMh5ff3SvGrfIGy6RoGHfoYA4qb_7jx_3Rt8/s1339/Screenshot%20from%202023-09-24%2012-48-40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="919" data-original-width="1339" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHYmwAtm43qNdDhw4am27Pi3g-Fj-7JX-H7WdslMV5fo0xGxI1hUl88cJ2pzn2s5WJnZ-U1KNcheg7fMf9rZiWLMVOgrLswwdctZmXSDVS5KVKH1PYRc9--fAyCdxfBL0ZVapGBok3zivtONng1N_47ObfMh5ff3SvGrfIGy6RoGHfoYA4qb_7jx_3Rt8/s320/Screenshot%20from%202023-09-24%2012-48-40.png" width="320" /></a></div><br /> エラー通知も1個減っていた。<p></p><p> </p><br /><p>とはいえ、ストックサイトへ登録するにあたっては大きいサイズでほしいのだが。</p><p> </p><p>GIMPでもSVGをインポートしてラスタライズすることができる。</p><p>GUI操作で読み込むと任意のスケールで問題なく読み込めるのだが、CLI呼び出しでバッチ処理に使おうとすると、きちんと変換された結果が出ない。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPg1W3qDSZXWzn1sTdeoTDA9NJJwRG7kCdNeHAiEgDZ5wGQ-U05M6pDrHqSZw634rlglwHwBlHFOwPC8VKSD2ZDCPEeizLigo4-Yh20tOMkCG0Lwc0uYpjZFMS9LoqXjZDibN9Fv9Jjyx4lhHQbi5DCAZwK_S3Xg4daJ_TYLKxTu8E9plFSjzXYXGKOvo/s3184/Screenshot%20from%202023-09-24%2012-56-14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1596" data-original-width="3184" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPg1W3qDSZXWzn1sTdeoTDA9NJJwRG7kCdNeHAiEgDZ5wGQ-U05M6pDrHqSZw634rlglwHwBlHFOwPC8VKSD2ZDCPEeizLigo4-Yh20tOMkCG0Lwc0uYpjZFMS9LoqXjZDibN9Fv9Jjyx4lhHQbi5DCAZwK_S3Xg4daJ_TYLKxTu8E9plFSjzXYXGKOvo/s320/Screenshot%20from%202023-09-24%2012-56-14.png" width="320" /></a></div><p><br /> 画像のような変換結果になる。変換されているごく一部のパーツを見るだけでも、明らかに画質が悪い。</p><p>またこの場合は背景を 白背景で書き出せば上手く行きそうに見えるが、試した範囲では、変換結果が真っ白になるだけで上手く行かなかった。</p><p> </p><p>以下、うまく行かなかったGIMPでのSVGインポート変換を一応抜粋。</p><p></p><p>```</p><p># GIMPのコマンドを使ってSVGを読み込む<br />gimp -i -b - <<EOF<br />(let* (<br /> (image (car (gimp-file-load RUN-NONINTERACTIVE "$input_file" "$input_file")))<br /> (drawable (car (gimp-image-get-active-layer image)))<br /> (new-width $size)<br /> (new-height $size)<br /> )<br /> (gimp-image-scale image new-width new-height)<br /> (file-jpeg-save RUN-NONINTERACTIVE image drawable "$output_file" "$output_file" 0.9 0 1 0 "" 0 1 0 1)<br /> (gimp-image-delete image)<br /> )<br />(gimp-quit 0)<br />EOF <br /></p><p>``` </p><p><br /></p><p>またGIMP操作にはもう1つ、Pythonからgimpfuを経由して呼び出す方法もあり、こちらは上野LISPな古いGIMPスクリプトより高度な操作ができるのだが、現状GIMPがPython3に対応していないとかで、今回は断念した。<br /></p>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-24977976232775891332023-06-08T21:41:00.003+09:002023-06-08T21:41:53.407+09:00FireFoxでcontent_scripts内のconsole.log()のメッセージが出力されない<p> 本件は、2023/09頃には解決しているはずの話です。<br /></p><p> </p><h2 style="text-align: left;">TL;DR </h2><p>Q. chromeで動いたwebextensionsがFireFoxでcontent_scripts内のconsole.log()のメッセージをコンソールに出力しないのはなぜか?<br /></p><p>A. FireFoxが 2023/06 FireFox 114.0時点でmanifest v3に対応していないにもかかわらずエラーを全く出さないため。</p><p> </p><h3 style="text-align: left;"># 再現</h3><p> </p><p>```: ディレクトリ構成</p><p dir="ltr" id="docs-internal-guid-33623d43-7fff-be16-515a-bdc33babe30f" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: transparent; --darkreader-inline-color: #e8e6e3; background-color: transparent; color: black; font-family: courier; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">DaisyWarekiConv/</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: transparent; --darkreader-inline-color: #e8e6e3; background-color: transparent; color: black; font-family: courier; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">├── manifest.json</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: transparent; --darkreader-inline-color: #e8e6e3; background-color: transparent; color: black; font-family: courier; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">├── icons/icon128.png</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: transparent; --darkreader-inline-color: #e8e6e3; background-color: transparent; color: black; font-family: courier; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">└── my_content_script.js</span></p><p> ```</p><p>```: my_content_script.js<br /></p><div data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: #17191a; --darkreader-inline-color: #c8c3bc; background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">console</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">.</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #d8d89f; color: #dcdcaa; font-family: courier;">log</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">(</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178; font-family: courier;">"hello webextensions daisy wareki conv."</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">);</span><span style="font-family: courier; white-space: normal;"> <br /></span></div></div><p>``` <br /></p><p>```: manifest.json</p><div data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: #17191a; --darkreader-inline-color: #c8c3bc; background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">{</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"manifest_version"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #afcaa1; color: #b5cea8; font-family: courier;">3</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">,</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"name"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178; font-family: courier;">"dev-DaisyWarekiConv"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">,</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"version"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178; font-family: courier;">"0.0.1"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">,</span></div><span style="font-family: courier;"><br /></span><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"icons"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: {</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"128"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178; font-family: courier;">"icons/icon128.png"</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> },</span></div><span style="font-family: courier;"><br /></span><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"content_scripts"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: [</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> {</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"matches"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: [</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178; font-family: courier;">"<all_urls>"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">],</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"js"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: [</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #cf947b; color: #ce9178; font-family: courier;">"my_content_script.js"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">]</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> }</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> ]</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">}</span></div></div><p></p><p>``` <br /></p><p> </p><h3 style="text-align: left;"># 間違った解決策</h3><h4 style="text-align: left;">## Webコンソール ではなくブラウザーコンソールを開く</h4><p> FireFoxのwebextensionsのconsole.log()メッセージはF12キーで開くWebコンソールではなく、Ctrl+Shift+Jで開くブラウザーコンソールに表示される、らしい。</p><p><a href="https://qiita.com/mouseofmicky/items/05dc51f792e16e25ae29">https://qiita.com/mouseofmicky/items/05dc51f792e16e25ae29</a> </p><p>Fコレ自体が相当にFireFox固有の落とし穴感があるが、こちらをチェックしていてもやはりログメッセージは出力されない。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ_7_GrnhmsAW03UlVyvX0TCf2MLZocnMAZz6Lyx1DGXgtaEptOQ3sKB8i_YT7E2ikdNwnIVmhiNFlNWDDlQVbL5E13Jt5ygFtvjpvMu2sPc9OuKsv5NhoA_yZ9ZhU75oiur4b2twBIewj8SRQavB-tXVCCpRr0dh7nbeTmiI7GypyWv0EoOqSl6vd/s2291/Screenshot%20from%202023-06-08%2021-35-04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1571" data-original-width="2291" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ_7_GrnhmsAW03UlVyvX0TCf2MLZocnMAZz6Lyx1DGXgtaEptOQ3sKB8i_YT7E2ikdNwnIVmhiNFlNWDDlQVbL5E13Jt5ygFtvjpvMu2sPc9OuKsv5NhoA_yZ9ZhU75oiur4b2twBIewj8SRQavB-tXVCCpRr0dh7nbeTmiI7GypyWv0EoOqSl6vd/s320/Screenshot%20from%202023-06-08%2021-35-04.png" width="320" /></a></div><br /> <p></p><p>また、開発ツールのコンソール(一時的な拡張機能の読み込み>調査 ボタンから開く )もあるが、こちらにも表示されない。これはbackgroundのメッセージが表示される(のだったと思う)。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMFsaenrCJPF2ZxCkh0jw2kTZ7SAm11HxBuMp40qevvb_0mFvKHqE025p8eWHmEusNALlqpV9SuTHTCKET07c7vIr6NAjQOXEwb6zqsjJyj-QZJVuZOeEWUdA8oLa7mlkONyxu_8D8XZnU0_jJhQKGkXNIih_h2KiNGrL0D2e-yAaamkIDxMyloYQs/s1737/Screenshot%20from%202023-06-08%2021-34-09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1055" data-original-width="1737" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMFsaenrCJPF2ZxCkh0jw2kTZ7SAm11HxBuMp40qevvb_0mFvKHqE025p8eWHmEusNALlqpV9SuTHTCKET07c7vIr6NAjQOXEwb6zqsjJyj-QZJVuZOeEWUdA8oLa7mlkONyxu_8D8XZnU0_jJhQKGkXNIih_h2KiNGrL0D2e-yAaamkIDxMyloYQs/s320/Screenshot%20from%202023-06-08%2021-34-09.png" width="320" /></a></div><br /><p><br /></p><p></p><h4 style="text-align: left;">## document.addEventListener('DOMContentLoaded', ~)</h4><p>そもそもcontent_scriptsがデフォルトでページ読み込みが完了したこのあたり(雑)のタイミングで読み込まれるものであるし、console.log()の出力成否はページの描画状況とは関係ない。</p><p> </p><h4 style="text-align: left;">## document.body.appendChild(elemDebugMsgOnDisplay);<br /></h4><p>console.logが出ないならDOMでページ上に直接出してしまえばいいじゃない、のアプローチ。 <br /></p><p>content_scriptsが走っていないので DOM書き換えが行われず、うまくいかない。<br /></p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayc3Ycf6JO4ezm4yeDtNgqlkcqSShASLYkYMn333m7fSdmEqeUdwWZfCPwN0GXuktfCBCfiyzJm2Kqq2mmGTZ0P2unIph_FzedowozAQPlydAZshNpLB9V7NBiq9Vb51Ii9U27fUDHzbvbug_3-iwV6454k3RFcsILyw8JSBOh_Z3UlC0uNdRKu_8/s1030/Screenshot%20from%202023-06-08%2021-36-03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="646" data-original-width="1030" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayc3Ycf6JO4ezm4yeDtNgqlkcqSShASLYkYMn333m7fSdmEqeUdwWZfCPwN0GXuktfCBCfiyzJm2Kqq2mmGTZ0P2unIph_FzedowozAQPlydAZshNpLB9V7NBiq9Vb51Ii9U27fUDHzbvbug_3-iwV6454k3RFcsILyw8JSBOh_Z3UlC0uNdRKu_8/s320/Screenshot%20from%202023-06-08%2021-36-03.png" width="320" /></a></div><p></p><h2 style="text-align: left;"># 解決策</h2><p></p><p>manifest v2(MV2)に変更する。</p><p>```</p><div data-darkreader-inline-bgcolor="" data-darkreader-inline-color="" style="--darkreader-inline-bgcolor: #17191a; --darkreader-inline-color: #c8c3bc; background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">{</span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;"> </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #87d5fe; color: #9cdcfe; font-family: courier;">"manifest_version"</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">: </span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #afcaa1; color: #b5cea8; font-family: courier;">2</span><span data-darkreader-inline-color="" style="--darkreader-inline-color: #c8c3bc; color: #cccccc; font-family: courier;">,</span></div></div><p>```<br /> <br /></p><h2 style="text-align: left;"># おわりに</h2><p>FireFoxはまだMV3未対応できちんと動かないなら、最初から読み込まないとか、動かないというエラーログを出してほしい。</p><p> </p>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-34858212110722639432023-04-14T21:32:00.005+09:002023-04-14T21:32:38.095+09:00Blenderでレンダリング画像の色がおかしい場合の対処<p></p><p>レンダリング結果の画像が編集画面と一致せずおかしくなる場合が有ります。</p><p>編集画面ではこれで、<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTCkCh0QCpqatkw3-AmzYd2HfMKeYcI1cRhCH6RzPZcFpmk1bOOLVGl2f0lFtuAbmY47OquEn7fe0c2zGveip_yhB5-cRJsDGUH-K0JM5GdgeRw-j70cg-cRShOp7vT4PsMBNqpyvViq9-iZ8JNi4K5_ciaS5DKrqZsuE0b0pdFO7Wlibn9ZHSF5TM/s3130/Screenshot%20from%202023-04-14%2016-26-08.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1890" data-original-width="3130" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTCkCh0QCpqatkw3-AmzYd2HfMKeYcI1cRhCH6RzPZcFpmk1bOOLVGl2f0lFtuAbmY47OquEn7fe0c2zGveip_yhB5-cRJsDGUH-K0JM5GdgeRw-j70cg-cRShOp7vT4PsMBNqpyvViq9-iZ8JNi4K5_ciaS5DKrqZsuE0b0pdFO7Wlibn9ZHSF5TM/s320/Screenshot%20from%202023-04-14%2016-26-08.png" width="320" /></a></div><p> レンダリング結果の色がおかしくなっています。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmZLSvcgUjohZTHusUOuZLoEbUU1EMpehjjSn8lKngvF7vJWeDvBqtTO8yeYedfaBsOVjBdgz73nJgvQOKr27hFXJKgE1uhP1NhI1qMhmmK_9KEFrCVQBfMIbsQdUsG9geq5B89XoU7GpnmtMPlgxORpscUvhYrlo-7ZgcBc_235U1C_NrsP8T_LRS/s3130/Screenshot%20from%202023-04-14%2016-06-40.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1890" data-original-width="3130" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmZLSvcgUjohZTHusUOuZLoEbUU1EMpehjjSn8lKngvF7vJWeDvBqtTO8yeYedfaBsOVjBdgz73nJgvQOKr27hFXJKgE1uhP1NhI1qMhmmK_9KEFrCVQBfMIbsQdUsG9geq5B89XoU7GpnmtMPlgxORpscUvhYrlo-7ZgcBc_235U1C_NrsP8T_LRS/s320/Screenshot%20from%202023-04-14%2016-06-40.png" width="320" /></a></div><p><br /></p><p>原因はWorldの背景色が反射でオブジェクトに映っているためです。</p><p> Scene>Surface>Color から設定できます。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVfBtJPwUc8kaMOFYWoeoNXc3Dj78B1PQ9AxsXojpTAf6FsByCnN52BsAQ5j79TgxgzavwagjEh1WGeD7YGVZGn34eI_wAiJADMit7zIetRjxsWPkzwOLS-H4IsMm0jDvPq6Kdp4RzsV4PajnjubJB3ZRMPiKsNkYvKTd5EMm-oTeNa8KYXwqa5VWq/s1230/Screenshot%20from%202022-12-29%2021-28-32--.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1230" data-original-width="1023" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVfBtJPwUc8kaMOFYWoeoNXc3Dj78B1PQ9AxsXojpTAf6FsByCnN52BsAQ5j79TgxgzavwagjEh1WGeD7YGVZGn34eI_wAiJADMit7zIetRjxsWPkzwOLS-H4IsMm0jDvPq6Kdp4RzsV4PajnjubJB3ZRMPiKsNkYvKTd5EMm-oTeNa8KYXwqa5VWq/s320/Screenshot%20from%202022-12-29%2021-28-32--.png" width="266" /></a></div><p>また右上のViewを選択することでRenderingプレビューで表示して編集することもできます。</p><p>またViewの設定ではSceneWorldのチェックを外すと背景色がオブジェクトに映らなくなります。</p><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1F_zJUkWnKlO96_yMWdLfNXYutebgO-IrDyvm3WoSgnX_lXQRgsIU3LKVTq9fNMAMFm2_ZDlspk5krjXh0ohB_cAp_HrdIrSmOcnf9orZmzbEIhcfHj8ZKVCu4LQ1a2P9rO1g3bymGQd6kbBcQ5J-wMar_PfE-jfv2dSHkIPEK3AIm54qcnaK0Ohc/s3130/Screenshot%20from%202023-04-14%2016-25-55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1890" data-original-width="3130" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1F_zJUkWnKlO96_yMWdLfNXYutebgO-IrDyvm3WoSgnX_lXQRgsIU3LKVTq9fNMAMFm2_ZDlspk5krjXh0ohB_cAp_HrdIrSmOcnf9orZmzbEIhcfHj8ZKVCu4LQ1a2P9rO1g3bymGQd6kbBcQ5J-wMar_PfE-jfv2dSHkIPEK3AIm54qcnaK0Ohc/s320/Screenshot%20from%202023-04-14%2016-25-55.png" width="320" /></a></div><br /><p></p><p></p><p>以上です。<br /></p><div style="background: rgb(215, 255, 215); border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-21119004440802192352023-04-14T21:21:00.000+09:002023-04-14T21:21:02.070+09:00ImageMagickで画像変換に失敗する場合に行うリソース上限設定<p></p><p>ImageMagickでPNGをJPGに変換しようとしたところ、 エラーが発生。</p><p></p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpl5r9UqT5NRJtIUqvMYlgBq39yQ8_765xFeYr2VZtlua2H4tddK-r9fzALh83V1TT3s2VTIIu1-S6cfjBl2XOrBY52Si8trLTzPTZ_f1OiPm4J8qDskeeLVNxsQlJW3zNGYFa0kz2zhUa6DdUvlQfWBJt4VXhZKrCWFMAQ95Bk8-dChEPaIx00CSs/s2203/Screenshot%20from%202023-04-14%2021-10-19.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1465" data-original-width="2203" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpl5r9UqT5NRJtIUqvMYlgBq39yQ8_765xFeYr2VZtlua2H4tddK-r9fzALh83V1TT3s2VTIIu1-S6cfjBl2XOrBY52Si8trLTzPTZ_f1OiPm4J8qDskeeLVNxsQlJW3zNGYFa0kz2zhUa6DdUvlQfWBJt4VXhZKrCWFMAQ95Bk8-dChEPaIx00CSs/s320/Screenshot%20from%202023-04-14%2021-10-19.png" width="320" /></a></div><p></p><p></p><p><br /></p><p>使用コマンド:<br /></p><p>`<span style="font-family: courier;">find *.png | xargs -I{} convert "{}" "{}.jpg"</span>` </p><p> エラーメッセージ:</p><p>```<br /><span style="font-family: courier;">convert-im6.q16: no images defined `Shinden144_Camera.FreeTop-fs8.png.jpg' @ error/convert.c/ConvertImageCommand/3229.</span><br />```</p><p><br /></p><p>エラーメッセージは原因を指しておらず、またコマンドのファイルパスやオプションによるものではなく、原因はリソース不足でした。</p><p>PCの性能ではなく、ImageMagickの設定上のリソース上限です。 <br /></p><p>10000*10000pxを超えるようなサイズの大きい画像をImageMagickで変換するには、ImageMagickのリソース上限Upが必要となります。<br /></p><br /><p>Ubuntu24.04の場合のパスは次の通り。<br /></p><p>`<span style="font-family: courier;">sudo vim /etc/ImageMagick-6/policy.xml</span>` <br /></p><p>次のように上限変更してリソース使用量を増やしました。<br /></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: 'Droid Sans Mono', 'monospace', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #d4d4d4;">```</span></div><div><span style="color: #d4d4d4;"> <policy domain="resource" name="memory" value="1024MiB"/></span></div><div><span style="color: #d4d4d4;"> <policy domain="resource" name="map" value="1024MiB"/></span></div><div><span style="color: #d4d4d4;"> <policy domain="resource" name="width" value="64KP"/></span></div><div><span style="color: #d4d4d4;"> <policy domain="resource" name="height" value="64KP"/></span></div><div><span style="color: #d4d4d4;"> <policy domain="resource" name="area" value="512MP"/></span></div><div><span style="color: #d4d4d4;"> <policy domain="resource" name="disk" value="4GiB"/></span></div><div><span style="color: #d4d4d4;">```</span></div></div><p></p><p></p><p></p><p></p><p><br /></p><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBzY2g2ngNfwQZfgGDwh7QtWMwTeJ8f7jareoo68Vgdv2J7Pf9ELVtyoqL0Wh1IynhLOBWmw0tahe9pmqG5-r_KrqOAfgZCyDMbIxlAjy9DjdPLW-AQ9EB8Y4bzRT-4z9ujiAo14dOWNdOwQ01qvHMI4ChymP4MeKa3rFRPYe47yYandH-ChmUdiR6/s1291/Screenshot%20from%202023-04-14%2021-11-29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="792" data-original-width="1291" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBzY2g2ngNfwQZfgGDwh7QtWMwTeJ8f7jareoo68Vgdv2J7Pf9ELVtyoqL0Wh1IynhLOBWmw0tahe9pmqG5-r_KrqOAfgZCyDMbIxlAjy9DjdPLW-AQ9EB8Y4bzRT-4z9ujiAo14dOWNdOwQ01qvHMI4ChymP4MeKa3rFRPYe47yYandH-ChmUdiR6/s320/Screenshot%20from%202023-04-14%2021-11-29.png" width="320" /></a></div><br /><p><br />参考:<br /><a href="http://www.imagemagick.org/discourse-server/viewtopic.php?t=34044">http://www.imagemagick.org/discourse-server/viewtopic.php?t=34044</a><br /></p><p></p><p></p><p><br /></p><div style="background: rgb(215, 255, 215); border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-53424930049571065682022-12-10T17:38:00.004+09:002022-12-10T17:38:50.405+09:00ドラッグ可能なHTMLダイアログ(pure javascript)<p> ファイルを開くダイアログならともかく、Itemの回転ダイアログなどは画面に被っていると、編集対象が隠れてダイアログ操作しずらくなってしまいます。</p><p>そこでモーダルダイアログ をドラッグで移動できるようにする必要があります。</p><p>HTMLのダイアログの場合、ドラッグ可能にするにはJSが必要で少しばかり手間です。</p><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0w_Cfwd9RbY9sLU0sAXjyRFMuN47a-FxgM54T5MILfDa1B6DmR6f2SMfO7wl8QC9zy-nD_d6HUY89fBnpeorV5da-sXSsjAmUkOFIseZkT2q6QPzQZRqCGk65LqXzGlVl-jhC19bHzeH3RzUCrV_vHLYDNhES915qtsUdVmbdz_E-nHhw7NR-r-N1/s1502/Screenshot%20from%202022-12-10%2017-23-15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1498" data-original-width="1502" height="319" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0w_Cfwd9RbY9sLU0sAXjyRFMuN47a-FxgM54T5MILfDa1B6DmR6f2SMfO7wl8QC9zy-nD_d6HUY89fBnpeorV5da-sXSsjAmUkOFIseZkT2q6QPzQZRqCGk65LqXzGlVl-jhC19bHzeH3RzUCrV_vHLYDNhES915qtsUdVmbdz_E-nHhw7NR-r-N1/s320/Screenshot%20from%202022-12-10%2017-23-15.png" width="320" /></a></div><br /> <p></p><p> </p><p>こちらに一案が紹介されていますが、これが動かなかったので別案を立てたものです。</p><p><a href="https://qiita.com/kotazuck/items/0465250d6e026983fa50"> ドラッグで移動できるdialogタグをざっくりと作る</a><br /></p><p>たぶんdialogやその親ページにかけられているCSSやHTML構造によって異なるのでしょう。<br /></p><p> </p><p>JS,CSS,HTML共にバニラな状態で動くはずです。<br /></p><p>HTML</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: 'Droid Sans Mono', 'monospace', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">dialog</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">id</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'doc-save-dialog'</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">draggable</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"true"</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">form</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">method</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"dialog"</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">h1</span><span style="color: grey;">></span><span style="color: #d4d4d4;">Save?</span><span style="color: grey;"></</span><span style="color: #569cd6;">h1</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> document name:</span><span style="color: grey;"><</span><span style="color: #569cd6;">br</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">input</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">id</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'doc-name-input'</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">type</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'text'</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">class</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"default-focus-in-dialog"</span><span style="color: grey;">/></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">menu</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">button</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">value</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"cancel"</span><span style="color: grey;">></span><span style="color: #d4d4d4;">Cancel</span><span style="color: grey;"></</span><span style="color: #569cd6;">button</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">button</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">value</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"Save"</span><span style="color: grey;">></span><span style="color: #d4d4d4;">Save</span><span style="color: grey;"></</span><span style="color: #569cd6;">button</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"></</span><span style="color: #569cd6;">menu</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"></</span><span style="color: #569cd6;">form</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"></</span><span style="color: #569cd6;">dialog</span><span style="color: grey;">></span></div></div><p> 大事なのはこれです。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: 'Droid Sans Mono', 'monospace', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #9cdcfe;">draggable</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"true"</span></div></div><p>dialogタグにこれを付け忘れると、ドラッグはできるもののマウスでポイントが一発で上手く行かないダイアログになってしまいます。</p><p>かなり操作がストレスになります。 </p><p><br /></p><p> JS</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: 'Droid Sans Mono', 'monospace', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #d4d4d4;"> {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">const</span><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">dialogs</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">document</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">getElementsByTagName</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'dialog'</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">dialogs</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">forEach</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">let</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">mouse</span><span style="color: #d4d4d4;"> = {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">x</span><span style="color: #9cdcfe;">:</span><span style="color: #d4d4d4;"> </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">y</span><span style="color: #9cdcfe;">:</span><span style="color: #d4d4d4;"> </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;"> };</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">let</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;"> = {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">x</span><span style="color: #9cdcfe;">:</span><span style="color: #d4d4d4;"> </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">y</span><span style="color: #9cdcfe;">:</span><span style="color: #d4d4d4;"> </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;"> };</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">addEventListener</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'dragstart'</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">mouse</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageY</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">mouse</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageX</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;">(! </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">top</span><span style="color: #d4d4d4;">){</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">top</span><span style="color: #d4d4d4;"> = </span><span style="color: #ce9178;">"0px"</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">left</span><span style="color: #d4d4d4;"> = </span><span style="color: #ce9178;">"0px"</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;"> = </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;"> = </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> }</span><span style="color: #c586c0;">else</span><span style="color: #d4d4d4;">{</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">parseInt</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">top</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">slice</span><span style="color: #d4d4d4;">(</span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, -</span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">), </span><span style="color: #b5cea8;">10</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">parseInt</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">left</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">slice</span><span style="color: #d4d4d4;">(</span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, -</span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">), </span><span style="color: #b5cea8;">10</span><span style="color: #d4d4d4;">); </span></div><div><span style="color: #d4d4d4;"> }</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">dataTransfer</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">setDragImage</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">document</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">createElement</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'div'</span><span style="color: #d4d4d4;">), </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">console</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">log</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'dragstart'</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageX</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageY</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">mouse</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">top</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;"> });</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">addEventListener</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'drag'</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (</span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;"> === </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;"> && </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;"> === </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">) </span><span style="color: #c586c0;">return</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">const</span><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">movey</span><span style="color: #d4d4d4;"> = (</span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageY</span><span style="color: #d4d4d4;"> - </span><span style="color: #9cdcfe;">mouse</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">) * </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">const</span><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">movex</span><span style="color: #d4d4d4;"> = (</span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageX</span><span style="color: #d4d4d4;"> - </span><span style="color: #9cdcfe;">mouse</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;">) * </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">top</span><span style="color: #d4d4d4;"> = (</span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;"> + </span><span style="color: #4fc1ff;">movey</span><span style="color: #d4d4d4;">) + </span><span style="color: #ce9178;">'px'</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">left</span><span style="color: #d4d4d4;"> = (</span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;"> + </span><span style="color: #4fc1ff;">movex</span><span style="color: #d4d4d4;">) + </span><span style="color: #ce9178;">'px'</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">console</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">log</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'drag'</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageX</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">evt</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">pageY</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">mouse</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">pos</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">top</span><span style="color: #d4d4d4;">, </span><span style="color: #4fc1ff;">movey</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;"> });</span></div><div><span style="color: #d4d4d4;"> });</span></div><div><span style="color: #d4d4d4;"> }</span></div></div><p>drag開始とdrag中のマウス位置の差分をとって、drag開始時のDialog位置に足し合わせた新しい座標をセットしています。</p><p>mouseの移動量をそのまま差分で足していくと、mousemoveイベントの発行具合でだんだんズレていくので(このコードでは検証していませんが恐らく経験的に)、わざわざ初期値を保存して差分を計算しています。</p><p> </p><p>TODO として、移動量に2を掛けないと上手く行かない理由は不明です。なのでこのコードは結果的に動いていますが何か間違っている気がします。</p><p><br /></p><p> 最初は、</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: 'Droid Sans Mono', 'monospace', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">top</span><span style="color: #d4d4d4;"> = </span><span style="color: #ce9178;">"0px"</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">left</span><span style="color: #d4d4d4;"> = </span><span style="color: #ce9178;">"0px"</span><span style="color: #d4d4d4;">;</span></div></div><p> がundefinedで存在しないので、セットしてしまいます。</p><p>初期位置はtop,left共に0pxらしいです。</p><p>2度め以降の移動では、dialogの初期位置もここから取るようにします。 <br /></p><p> </p><p> </p><p>本ドラッグ可能dialogコードは一応、手元の環境の中で</p><p>- 同ページ内に複数ダイアログで問題なし。 </p><p>- 開き直したダイアログが同じ位置に出る。</p><p>- 1度ドラッグして、再度ドラッグしてもズレたり問題は起こらない。</p><p> ことを確認しています。 <br /></p><div style="background: rgb(200, 240, 255); border-radius: 3px; border: 1.5px solid rgb(0, 0, 170); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-56750295120238910222022-12-03T23:41:00.000+09:002022-12-03T23:41:02.392+09:00HTML Dialog上で入力中にEnterキー押下しても大丈夫にする<p> HTML Dialog上で入力中にEnterキー押下してしまうとユーザ入力内容が消えてしまう問題を解決する方法です。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYmUCRcPBq1iVYG3GoFp0si0haNOL95TZcS5178OPnCuY_6ZVqmMgpwNtqQydIK_AI_cxvsaXuJ0wdNKDQZgWJWxKCfVkewWJfF5gM_gjEXb5RvxdH8_fbk42CGq2QCId-Us1zou-0ic8nGgVArqSiQaVnChgw_lWW1_O1io8TzVfYZwTjOihunvGI/s1173/Screenshot%20from%202022-12-03%2023-26-56.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1173" data-original-width="1105" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYmUCRcPBq1iVYG3GoFp0si0haNOL95TZcS5178OPnCuY_6ZVqmMgpwNtqQydIK_AI_cxvsaXuJ0wdNKDQZgWJWxKCfVkewWJfF5gM_gjEXb5RvxdH8_fbk42CGq2QCId-Us1zou-0ic8nGgVArqSiQaVnChgw_lWW1_O1io8TzVfYZwTjOihunvGI/s320/Screenshot%20from%202022-12-03%2023-26-56.png" width="301" /></a></div><p></p><p></p><p> HTML Dialog上でEnterキー押下した場合のデフォルト動作は、Cancelボタン押下された扱いで閉じることです。</p><p>しかしこの動作はinput elementにフォーカスが入っている状態でも有効です。</p><p>Dialog上でinput elementで入力している途中で閉じてしまいます。</p><p>しかも、WebアプリとしてはCancelボタン押下を検出したら入力をなかったことにするはずです。</p><p>結果、ユーザとしては入力途中の内容が突然消えてしまうわけで、困ります。<br /></p><p> </p><p>そこでこの、キャンセルで閉じてしまうDialogの動作を変更します。</p><br /><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: 'Droid Sans Mono', 'monospace', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #d4d4d4;"> </span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #6a9955;">// MEMO デフォルトではdialog内のinputでEnter押下すると、dialogが閉じてしまう。</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #6a9955;">// そのためEnterキーをキャンセルしつつ、入力の確定は行う処理をここで追加。</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dialog</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">addEventListener</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'keydown'</span><span style="color: #d4d4d4;">, (</span><span style="color: #9cdcfe;">event</span><span style="color: #d4d4d4;">) </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">const</span><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">elem</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">document</span><span style="color: #d4d4d4;">.</span><span style="color: #4fc1ff;">activeElement</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">console</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">log</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">`dialog keydown "</span><span style="color: #569cd6;">${</span><span style="color: #9cdcfe;">event</span><span style="color: #d4d4d4;">.</span><span style="color: #4fc1ff;">key</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"`</span><span style="color: #d4d4d4;">, </span><span style="color: #4fc1ff;">elem</span><span style="color: #d4d4d4;">)</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'INPUT'</span><span style="color: #d4d4d4;"> === </span><span style="color: #4fc1ff;">elem</span><span style="color: #d4d4d4;">.</span><span style="color: #4fc1ff;">tagName</span><span style="color: #d4d4d4;"> && </span><span style="color: #ce9178;">'Enter'</span><span style="color: #d4d4d4;"> === </span><span style="color: #9cdcfe;">event</span><span style="color: #d4d4d4;">.</span><span style="color: #4fc1ff;">key</span><span style="color: #d4d4d4;">){</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">elem</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">dispatchEvent</span><span style="color: #d4d4d4;">( </span><span style="color: #569cd6;">new</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">KeyboardEvent</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'change'</span><span style="color: #d4d4d4;">));</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">event</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">preventDefault</span><span style="color: #d4d4d4;">();</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #c586c0;">return</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;"> }</span></div><div><span style="color: #d4d4d4;"> });</span></div></div><p></p><p><br /></p><p>入力確定したらOKボタン押下扱いでDialogを閉じる、などしたければさらに工夫が必要になりますが、とりあえずこれでユーザ入力が失われる問題は解決します。<br /></p><p><br /></p><p>なお他の方法。 <br /></p><p><a href="https://developer.hatenastaff.com/entry/2021/12/01/100000">https://developer.hatenastaff.com/entry/2021/12/01/100000</a></p><p> </p><p> </p>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-80734852689277440412022-12-03T21:15:00.000+09:002022-12-03T21:15:46.675+09:00画像Buttonのclickイベントが発火しないとき<p>画像Buttonのクリックイベントが発火せず、けっこう悩みました。<br /> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgM30ZwqMZz8p7KSlSmzfFmFWZ5fmFQwtblCk0f9UWd6Eo-tMOqPzjSNchktSxdrtBQFUGruJpcxuSbSxSOTUmapmHe3kR47aWoAeOcZBn5bJzjIXOhATlZjQbQVUUhOgzHMkDzU4K6iVZA-o6SCn6MXc6YeY7as-_9XF8hHJkPWQi5J0UFHhUAxZ2/s756/Screenshot%20from%202022-12-02%2017-54-57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="756" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgM30ZwqMZz8p7KSlSmzfFmFWZ5fmFQwtblCk0f9UWd6Eo-tMOqPzjSNchktSxdrtBQFUGruJpcxuSbSxSOTUmapmHe3kR47aWoAeOcZBn5bJzjIXOhATlZjQbQVUUhOgzHMkDzU4K6iVZA-o6SCn6MXc6YeY7as-_9XF8hHJkPWQi5J0UFHhUAxZ2/s320/Screenshot%20from%202022-12-02%2017-54-57.png" width="320" /></a></div><br /><br /><p></p><p> デベロッパーツールのコンソールには特にエラーなど表示されず。</p><p>またクリックイベントも登録された状態になっています。登録忘れや削除されてしまったなどではないようです。</p><p> <br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL3W5K5xDmqaqTY--glI9n6yj5RR2mXlkrjBgonRz_MRUKFwYVJ0hM0MxXaUgNEH6v8susa8aKBTrC_E-944k2Vei1S9_-ybxjM9KpOHsWUGE3r7xmV0TREv_MLvWFXUO5GwwvTzWivD6zCurOSHBGKxxYVIu7U8dA6E06jv0LpO630jIrsunaVZn1/s756/Screenshot%20from%202022-12-02%2014-12-51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="756" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL3W5K5xDmqaqTY--glI9n6yj5RR2mXlkrjBgonRz_MRUKFwYVJ0hM0MxXaUgNEH6v8susa8aKBTrC_E-944k2Vei1S9_-ybxjM9KpOHsWUGE3r7xmV0TREv_MLvWFXUO5GwwvTzWivD6zCurOSHBGKxxYVIu7U8dA6E06jv0LpO630jIrsunaVZn1/s320/Screenshot%20from%202022-12-02%2014-12-51.png" width="320" /></a></div><br /><p> </p><p>問題の起こったボタンがjsで生成した直後のもので、他のところではすでに同じような画像Buttonで問題なくclickイベントが動作していました。</p><p>状況的に「documentツリー内にappendしてからでないとダメなのか?」などと疑ったり試したりと悩んだものの、原因はそれではなく。</p><p>理由は全く別のところにありました。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB6yq6oztx692Z4Ja06tkpRREPDXIAgKXvkzBkkq54v_gFOk4tjRgM3FoO48GNX4BshIaRD4mcN2HwS2DI_MB5l5vbWUAfkFLo57TAz_Qlx3IS8EYEohAmEN4MFFHU6RRIfe6s7UVnbS_UrjYpXx-BUivYrHrn_bA3b49nQaCiOrCos6qJ7GKZNg-K/s721/Screenshot%20from%202022-12-02%2014-08-43.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="721" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB6yq6oztx692Z4Ja06tkpRREPDXIAgKXvkzBkkq54v_gFOk4tjRgM3FoO48GNX4BshIaRD4mcN2HwS2DI_MB5l5vbWUAfkFLo57TAz_Qlx3IS8EYEohAmEN4MFFHU6RRIfe6s7UVnbS_UrjYpXx-BUivYrHrn_bA3b49nQaCiOrCos6qJ7GKZNg-K/s320/Screenshot%20from%202022-12-02%2014-08-43.png" width="320" /></a></div><p> そもそもHTMLで「画像ボタン」 を実装する方法はいくつも種類があります。</p><p>img要素のclickイベントをListenするとか。 <br /></p><p>その中で今回はSVGを使う都合から、「Button要素にObject要素を入れて、Object要素でSVGを表示」という方法を取っていました。<br /></p><p> つまりこれです。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: grey;"><</span><span style="color: #569cd6;">button</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">class</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"layer_is-visible"</span><span style="color: grey;">></span></div><div><span style="color: #d4d4d4;"> </span><span style="color: grey;"><</span><span style="color: #569cd6;">object</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">data</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"resource/layer/is-visible-open.svg"</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">type</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"image/svg+xml"</span><span style="color: grey;">></</span><span style="color: #569cd6;">object</span><span style="color: grey;">></span></div><div><span style="color: grey;"></</span><span style="color: #569cd6;">button</span><span style="color: grey;">></span></div></div><p> </p><p>さんざんListenの方法やタイミング、ターゲットを変えてと一通り試してから、そういえばかなり初期に画像ButtonにCSS設定していたな、 と思い出して確認したところそこに正解がありました。</p><p><br /></p><p>CSSにて以下を記載。 <br /></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #6a9955;">/* click event Buttonのclickイベントを動作させる */</span></div><div><span style="color: #d7ba7d;">button</span><span style="color: #d4d4d4;"> </span><span style="color: #d7ba7d;">object</span><span style="color: #d4d4d4;">{</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">pointer-events</span><span style="color: #d4d4d4;">: </span><span style="color: #ce9178;">none</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">}</span></div></div><p> 以上です。</p><p> </p><p>恐らくButtonのchildrenにObjectがあることで、ClickイベントをObjectが受け取り下のButtonまでたどり着かないということなのだと思います。<br /></p><p> </p><p>CSS設定を忘れたまま別の箇所で意図しない影響が出ないよう、CSSセレクタでターゲットを絞っていたのが裏目に出ました。今度こそドキュメント全体に影響するよう変更したので、もう次からはドキュメントのどこでSVG画像ボタンを使っても大丈夫です。</p><p>...恐らく。 <br /></p><p> </p><p> ここでひとつ罠なのは、「内側のObject要素がClickイベントを受け止めているからButtonにClickが発生しない」にもかかわらず、「ならばとObject要素でClickイベントをListenerしても、これもまた発火しない」という部分。</p><p>(Object要素の中のSVGが要素扱いでClickイベントを受けているのかもしれないけれど、だったらデベロッパーツールでObject要素内のSVG まで展開されるのが一貫性というものでは? などと思ったり。)<br /></p><p> </p><p>なんというか「こういう設計(挙動)になっているきっと合理的な理由があるのだろうけれど、そんなのユーザにはわかりっこないよ!(要約)」というやつの気がします。<br /></p><p>DOMイベント構造は複雑怪奇。 <br /></p><div style="background: rgb(200, 240, 255); border-radius: 3px; border: 1.5px solid rgb(0, 0, 170); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(200, 240, 255); border-radius: 3px; border: 1.5px solid rgb(0, 0, 170); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(200, 240, 255); border-radius: 3px; border: 1.5px solid rgb(0, 0, 170); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-90805024599010570062022-09-24T12:08:00.002+09:002022-09-24T12:08:08.552+09:00BlenderでBooleanModifierによる断面に色を付ける<h3 style="text-align: left;">前提: </h3><p>Blenderでモデルを作成する際、再加工のしやすさからBooleanModifieで形をつくる箇所がある。</p><p>例としては、銃眼の穴やモールドを開けたり、複数オブジェクトからなる給気口で同じ断面を作ったりする。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrPK_6eaQSqot5stjnSUl6YL-b1o2GF9z1juVkBZ-xfvifCpVObeZmXwa88_IBCgfB0f0B2e2XdIMLv3MQnQPyxgJcCcFULzEO7Mfsa3OiwnI53Tv5a5RcGuMfif4I4c2XLZftQz7VnpwfbiVgl8Tz9bKcIk8JLhGV_rMerEqh84VKAGeQFfLBibIG/s2207/Screenshot%20from%202022-09-24%2011-14-24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1701" data-original-width="2207" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrPK_6eaQSqot5stjnSUl6YL-b1o2GF9z1juVkBZ-xfvifCpVObeZmXwa88_IBCgfB0f0B2e2XdIMLv3MQnQPyxgJcCcFULzEO7Mfsa3OiwnI53Tv5a5RcGuMfif4I4c2XLZftQz7VnpwfbiVgl8Tz9bKcIk8JLhGV_rMerEqh84VKAGeQFfLBibIG/s320/Screenshot%20from%202022-09-24%2011-14-24.png" width="320" /></a></div><p></p><p>形状を作ったあと、着色する。</p><p>Blenderの着色では、オブジェクト上を平面ごとに色を塗り分けることができる。</p><p> </p><h3 style="text-align: left;">問題: <br /></h3><p>しかしこのとき、BooleanModifierで作られた面は、元Objectには存在しないことになるため、Modifiyerによる加工を非可逆にApplyしてしまわなければ着色できないことになる。</p><p><br /></p><h3 style="text-align: left;">解決方法:</h3><p>Booleanで抜きに使うObjectと、抜く対象のObjectの両方のMaterialProperty(使用する色)に、付けたい色を登録する。</p><p>抜きに使うObjectを付けたい色に着色すると、BooleanModifierで抜いた箇所が着色される。</p><p> </p><p>注意点として、このとき、抜く対象の側のObjectに抜き色を登録しておくのを忘れると、着色されない。<br /></p><p><br /></p><h2 style="text-align: left;">実際の作業のようす<br /></h2><p> </p><p>着色前の状態</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7opabFsPMw3XN9YSI265oTnuXJK0CH_qhOkiVe0UgpbjrGMWp0C8cYQnFdXq2_7tiwYgLQopHgM0YNtJg-S5PbpktaYtlfpbtRTpVDetg1Vhcq2TrNlJ8tusDxevDKQESCP2enut55eBFWkUsDFGVY9Gb9WalvEdtRbaDSeA1wDDP8FMkVQw_pc8E/s1920/untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1920" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7opabFsPMw3XN9YSI265oTnuXJK0CH_qhOkiVe0UgpbjrGMWp0C8cYQnFdXq2_7tiwYgLQopHgM0YNtJg-S5PbpktaYtlfpbtRTpVDetg1Vhcq2TrNlJ8tusDxevDKQESCP2enut55eBFWkUsDFGVY9Gb9WalvEdtRbaDSeA1wDDP8FMkVQw_pc8E/s320/untitled.png" width="320" /></a></div>銃眼あたりを見ると、影が入っている<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieYKIRGecYcuh1rzGCjeRE26qOV5eHsPf5DucQVNVFND8BkijWBq6IOU_a5x6-Kd9eVB7gmEHn394Z8BDUIigPu-xGT6t5K6t9bPLzWcSpwyFyB1lgixcbcq-MvVFzRpLjPLAoiOVo5UruPsmn1r0chgw37o75afCxxiyGNvWYPUYBuCWUWwdmobgN/s1873/Screenshot%20from%202022-09-24%2011-05-39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1469" data-original-width="1873" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieYKIRGecYcuh1rzGCjeRE26qOV5eHsPf5DucQVNVFND8BkijWBq6IOU_a5x6-Kd9eVB7gmEHn394Z8BDUIigPu-xGT6t5K6t9bPLzWcSpwyFyB1lgixcbcq-MvVFzRpLjPLAoiOVo5UruPsmn1r0chgw37o75afCxxiyGNvWYPUYBuCWUWwdmobgN/s320/Screenshot%20from%202022-09-24%2011-05-39.png" width="320" /></a></div><p></p><p>画像は結果がわかりやすいよう機体の塗装色を白に寄せています。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwM91eDTslIqNJQbYZ_KUkw_3hbV52F_0gAj-On_P39spUuE4t48IODSOXj1tUvTMqGMrE9hfnMw-LyzYD1meBZDHtS-lq0SQs3ek1y6PpBvfCvoFUAIv_CkXSNy-etvEgMtL2p87-fHhMMD52uuCSTqdIfcemPwxWUeQ7HQX2QHT4il-jcqXX_U05/s2207/Screenshot%20from%202022-09-24%2011-14-39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1701" data-original-width="2207" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwM91eDTslIqNJQbYZ_KUkw_3hbV52F_0gAj-On_P39spUuE4t48IODSOXj1tUvTMqGMrE9hfnMw-LyzYD1meBZDHtS-lq0SQs3ek1y6PpBvfCvoFUAIv_CkXSNy-etvEgMtL2p87-fHhMMD52uuCSTqdIfcemPwxWUeQ7HQX2QHT4il-jcqXX_U05/s320/Screenshot%20from%202022-09-24%2011-14-39.png" width="320" /></a></div><br /><p>実際の作業の動画<br /></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/LSDlRwi9XC8" width="320" youtube-src-id="LSDlRwi9XC8"></iframe></div><br /><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/IIKM6r7By2w" width="320" youtube-src-id="IIKM6r7By2w"></iframe></div><p><br /></p>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-88283576822649487532022-03-21T17:11:00.002+09:002022-03-21T17:11:35.962+09:00加湿器をYAMAZEN KS-F407(WH) に買い替え<p> YAMAZENの加熱式加湿器 <a target="_blank" href="https://www.amazon.co.jp/gp/search?ie=UTF8&tag=michinarinuka-22&linkCode=ur2&linkId=2ae265aadb35750c4c54f686c66b4771&camp=247&creative=1211&index=electronics&keywords=KS-F407(WH)">KS-F407(WH)</a> を買いました。</p><p>超音波式は家電へのカルキ集積と衛生管理の問題、あと部屋を温めるのにも都合が良いことから、熱加湿器を選んでいます。</p><p>当時2000円台の小さな加湿器で5年近くやってきていたのですが、そろそろ水漏れなどしてきたので買い替えました。</p><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjrLLu3GOSGX_rwKsRK5QAWKClUKf82hROmNnD6Et9OrQ0oQ596_wRL3P4915OVr2U0DytaT5g79y_5KesAeGM6jy_h1LTKNCROhlERDUrMSTnB1tuw2ZrR6OkQQtPydngb2s_WD-HTqYp8x4P1Cnk9InmKnsf_qlgg329KV2AW027feKwWrFGvAFxc=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEjrLLu3GOSGX_rwKsRK5QAWKClUKf82hROmNnD6Et9OrQ0oQ596_wRL3P4915OVr2U0DytaT5g79y_5KesAeGM6jy_h1LTKNCROhlERDUrMSTnB1tuw2ZrR6OkQQtPydngb2s_WD-HTqYp8x4P1Cnk9InmKnsf_qlgg329KV2AW027feKwWrFGvAFxc=s320" width="240" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjWpD7klAcQ7BZ9hpVYLAgzySsQA_lqfjcWQ49Ylyr6caZGOJWokSXdxY0rSLgbdpzlv6EyX1AiLrj-9BgpVNPn5fru8exYX1-NBLVvrVtkSjbM9HC0q7MirWcTHgE2LxW4M7hgaSuMBoZUfcXI3MQ5r1nvY8I51yqNAg6k7oMst6G1e85krhavsZLr=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEjWpD7klAcQ7BZ9hpVYLAgzySsQA_lqfjcWQ49Ylyr6caZGOJWokSXdxY0rSLgbdpzlv6EyX1AiLrj-9BgpVNPn5fru8exYX1-NBLVvrVtkSjbM9HC0q7MirWcTHgE2LxW4M7hgaSuMBoZUfcXI3MQ5r1nvY8I51yqNAg6k7oMst6G1e85krhavsZLr=s320" width="240" /></a></div><p></p><p>箱を開けるとトリセツとフィルターがついていました。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjz-01t_9ngemwNhny5-DKmQD1OTPPEUYpMWp4yF_w3ymUrjgIMRG8xVwIpZ1O_2x8WhWTTu6-sr95eGhg7HSzXJxFGD6eiU0zV7ILFZ7FS-jFvHl_ECznOAdMbBuQC-ZYBgubPHavXKcRVln9TTllklGz0ZWQ697G0oWISni86N5cAbBCWF_znjJMX=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEjz-01t_9ngemwNhny5-DKmQD1OTPPEUYpMWp4yF_w3ymUrjgIMRG8xVwIpZ1O_2x8WhWTTu6-sr95eGhg7HSzXJxFGD6eiU0zV7ILFZ7FS-jFvHl_ECznOAdMbBuQC-ZYBgubPHavXKcRVln9TTllklGz0ZWQ697G0oWISni86N5cAbBCWF_znjJMX=s320" width="240" /></a></div>フィルターは交換用含めて2枚入っています。<p></p><p>フィルタの使用可能期間は使ってみた結果として、だいたい1冬くらいでしょうか。</p><p>水蒸気量の少ない設定で日中から夜中まで1日中ずっと使っている使い方の場合です。 <br /></p><p>フィルタは最初発泡スチロールかと思ったのですが、フェルトのような生地のカタマリで、最後にはボロリと千切れて使えなくなります。 </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiL3yy--9gZs3EOkGmJY9_EUbFXf0BfGV_AECbbXeAW5TcRsAE_vjhH7O5JqRS0oclklyTQv2GnIlWZcSgSp6Q-eny-U3mHBvHcpeD7Q4vHi2PoCZDlvdWsap0QJrlf-Ukt2ckn_NqxNSuopNBMu0YcGYCJ5UJQcC7G9ZuQMg76tVpT2X_00s7oFfi5=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEiL3yy--9gZs3EOkGmJY9_EUbFXf0BfGV_AECbbXeAW5TcRsAE_vjhH7O5JqRS0oclklyTQv2GnIlWZcSgSp6Q-eny-U3mHBvHcpeD7Q4vHi2PoCZDlvdWsap0QJrlf-Ukt2ckn_NqxNSuopNBMu0YcGYCJ5UJQcC7G9ZuQMg76tVpT2X_00s7oFfi5=s320" width="240" /></a></div>本体を取り出したところ。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEirkOyWLeuqG64DXyOXssssnHC7eT9vyXpwohG9y1oWoCiQfMG-LY11iBMs_c9lCZDcZALUhQANUdkxBWEelGS4nctsjjUzAO-NMT0ewhPdBBp4AXJOAnJCPz1p97qb4HNLnMA8vjaD5ERDs0MmBwx0pKo_UsuUmjhaH1EqAama3b24r5C1wArsTO7a=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEirkOyWLeuqG64DXyOXssssnHC7eT9vyXpwohG9y1oWoCiQfMG-LY11iBMs_c9lCZDcZALUhQANUdkxBWEelGS4nctsjjUzAO-NMT0ewhPdBBp4AXJOAnJCPz1p97qb4HNLnMA8vjaD5ERDs0MmBwx0pKo_UsuUmjhaH1EqAama3b24r5C1wArsTO7a=s320" width="240" /></a></div>本体の下面はこんな感じになっています。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEguQDYEToJKT3d-9evaFpiPbJFUreiyFp_njxsHbqvVEwdINRc8KeqLihaB4sRmu3xE66mXhXqllpKfZsEz2YH-aNM912EdV8UyLMUBZJ8aFlOnH1STiVHwyXwqAsbV1wX5_cfB4vT3UTXf7jF2TmhgCqqzgmZsbeRZCDkcHWSMyHrJftvEb37RKjSm=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEguQDYEToJKT3d-9evaFpiPbJFUreiyFp_njxsHbqvVEwdINRc8KeqLihaB4sRmu3xE66mXhXqllpKfZsEz2YH-aNM912EdV8UyLMUBZJ8aFlOnH1STiVHwyXwqAsbV1wX5_cfB4vT3UTXf7jF2TmhgCqqzgmZsbeRZCDkcHWSMyHrJftvEb37RKjSm=s320" width="240" /></a></div>フタのウラはこんな感じになっています。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhdVSoHhjZahQQ-6f3a4leX2L1pv2pVuWJuxfmCRs85LZMcwyf4bXm9vY5l_kAhV8C0t9qiKPlKkPfWg9AJZcnVGFWvuveIjzUljWFRUuaEfdGIXZaPqrPLMgQsq6g6K3kjfSQVqzZZdHvE26NewwKJ_TYrPO8PArtuNGX_YpzF7rQqshFqaxGp-UOp=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEhdVSoHhjZahQQ-6f3a4leX2L1pv2pVuWJuxfmCRs85LZMcwyf4bXm9vY5l_kAhV8C0t9qiKPlKkPfWg9AJZcnVGFWvuveIjzUljWFRUuaEfdGIXZaPqrPLMgQsq6g6K3kjfSQVqzZZdHvE26NewwKJ_TYrPO8PArtuNGX_YpzF7rQqshFqaxGp-UOp=s320" width="240" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjQx9aM4p_eCQ_DG6B8GeSpLoy-wwdRsl9x3-vtlhVVdjZqmBWaowrCVbGtHigVcnJMCMmmX3zsk0dxPohOVMdPQnIt_H4uiYU9Xenzrh9n4dEBDRpFYrUQvyrRVLOlxF-_7rCN5EjOvE4LsTsBMZ4N5e0d2yfQC_nHc8SDFIhKNKZniHtHo2pDHWEA=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEjQx9aM4p_eCQ_DG6B8GeSpLoy-wwdRsl9x3-vtlhVVdjZqmBWaowrCVbGtHigVcnJMCMmmX3zsk0dxPohOVMdPQnIt_H4uiYU9Xenzrh9n4dEBDRpFYrUQvyrRVLOlxF-_7rCN5EjOvE4LsTsBMZ4N5e0d2yfQC_nHc8SDFIhKNKZniHtHo2pDHWEA=s320" width="240" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiBRaYpsRd54dIIcY-C1NPCnIcdjb0FteEU03w-66B1RaRsN9TAX00Jvu86hOF1ul1UeO_3dLRRX8NRZ4C92axT4q5FERN5DSgmPfdw_iXdx1ZhKlLD6X9Dk_4UpEzpwYp5rcLkUpZa53GcDkvB8ep9iW3dS28F6FTLnt6T_LsHZJ11O9ps1obu3uKg=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4000" data-original-width="3000" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEiBRaYpsRd54dIIcY-C1NPCnIcdjb0FteEU03w-66B1RaRsN9TAX00Jvu86hOF1ul1UeO_3dLRRX8NRZ4C92axT4q5FERN5DSgmPfdw_iXdx1ZhKlLD6X9Dk_4UpEzpwYp5rcLkUpZa53GcDkvB8ep9iW3dS28F6FTLnt6T_LsHZJ11O9ps1obu3uKg=s320" width="240" /></a></div>蒸気の出る部分は煙突のようになっています。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh0cT0y6C1QrIn73rQofpn2WPc5b2D6w81VSYSHFWaU9Sud-HPJOuryW7eyLVskR2H9do5DTEix57IS7ma01typ5atI8RKnI74a-ayhCWaf9QYvRfr6j5T9oOk503JYFqIxuc2SahUdHuAUgVXh-6JOox0_9Io7THP1aKqz5dcVGIhw6IIyn1muLfd9=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEh0cT0y6C1QrIn73rQofpn2WPc5b2D6w81VSYSHFWaU9Sud-HPJOuryW7eyLVskR2H9do5DTEix57IS7ma01typ5atI8RKnI74a-ayhCWaf9QYvRfr6j5T9oOk503JYFqIxuc2SahUdHuAUgVXh-6JOox0_9Io7THP1aKqz5dcVGIhw6IIyn1muLfd9=s320" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi1sYsBepMQLfYFfW5kFd65MRgmkVmM2mJVUdvBbfHmVaL-4eP_3anSKZULkhIBhKzoFR7ZlFbhP9Vzwl7uEGmJ3vad0nhOy3K2X3lIcxg6FEUrZg0tZR1Ul3caL61_wXyFy96tz_iXsmgPt0GIlXfD7MGquFTg88W4eyKzj4i2ZAfaTW5MaBtQPDJD=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEi1sYsBepMQLfYFfW5kFd65MRgmkVmM2mJVUdvBbfHmVaL-4eP_3anSKZULkhIBhKzoFR7ZlFbhP9Vzwl7uEGmJ3vad0nhOy3K2X3lIcxg6FEUrZg0tZR1Ul3caL61_wXyFy96tz_iXsmgPt0GIlXfD7MGquFTg88W4eyKzj4i2ZAfaTW5MaBtQPDJD=s320" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhm-MfrzuZbhxM_i-P8lVmJZ2p4W7xk2ktdWGxRB0EBXj2MuHQvpgmND_IG0zK1nhPLyYOaHg3gwhJs3yXm8jhutq0NiUiLIOpLhItNOD-gTK8o5uAcfUpepRreXQ3-l7vf2HYJ4gQiQTB3OuYvmIBiFdMXQGbBhQPciDSghEJXRBfAvCvKYUexLbIB=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhm-MfrzuZbhxM_i-P8lVmJZ2p4W7xk2ktdWGxRB0EBXj2MuHQvpgmND_IG0zK1nhPLyYOaHg3gwhJs3yXm8jhutq0NiUiLIOpLhItNOD-gTK8o5uAcfUpepRreXQ3-l7vf2HYJ4gQiQTB3OuYvmIBiFdMXQGbBhQPciDSghEJXRBfAvCvKYUexLbIB=s320" width="320" /></a></div><p>中に入っている付属品と説明書。</p><p>謎の黒いリングは水受け部分を囲う溝に差し込むもので、この溝を水が通っていくようになっています。</p><p>理由は不明。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjg_4mWN1aMPbyZF5ClO_ZY85odYquFHVqHZt2SjmTSYTErYbQljwrUFatJTqCsz2FVlOlJSHww_BoUGbF8oEceX6n9ac8XRKYFBYrEpKxoaWOhZU05_ixSSqAsU4hqjiXEsn-n94I2br9WzrSpGEYfQkUkLJnubKLB0alr7-fZzMz6ieWrUtoMqAmr=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjg_4mWN1aMPbyZF5ClO_ZY85odYquFHVqHZt2SjmTSYTErYbQljwrUFatJTqCsz2FVlOlJSHww_BoUGbF8oEceX6n9ac8XRKYFBYrEpKxoaWOhZU05_ixSSqAsU4hqjiXEsn-n94I2br9WzrSpGEYfQkUkLJnubKLB0alr7-fZzMz6ieWrUtoMqAmr=s320" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjJftcXDc9IiemTrHHYh4A_zG2EY10-69aZvnYbmvTHOhTnrHdeQ5DMtVJEZH2nAWhQVUiZvHRHCF1ccPMpY0yx6Ti8ZjFWLusLbzTWjPSxLDTusEMozM49BXNVo_V0svxBW-FtdqRVUQR5uYe04XCCKgQfN0mO824IGe-pJvQdiwFkqK7gnM7lCyTC=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjJftcXDc9IiemTrHHYh4A_zG2EY10-69aZvnYbmvTHOhTnrHdeQ5DMtVJEZH2nAWhQVUiZvHRHCF1ccPMpY0yx6Ti8ZjFWLusLbzTWjPSxLDTusEMozM49BXNVo_V0svxBW-FtdqRVUQR5uYe04XCCKgQfN0mO824IGe-pJvQdiwFkqK7gnM7lCyTC=s320" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjx94tDg_dXc_tmrQ9tU2BDYj9IdOLAE6Yo54zmkrLmzmhknOrb9zQrbSH6FeNUMHtmJxZbVHGOwWCo2q-bpZ46Xv6SZ1rPdPx7s7ImStkoIVKr-LrQloD8cn_yIYzDG8S6Li_lHX1HP1CLBcF0p-VDS6XavL_WcHEBVcSYAMzyRWY3cEO5emkRuFTQ=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjx94tDg_dXc_tmrQ9tU2BDYj9IdOLAE6Yo54zmkrLmzmhknOrb9zQrbSH6FeNUMHtmJxZbVHGOwWCo2q-bpZ46Xv6SZ1rPdPx7s7ImStkoIVKr-LrQloD8cn_yIYzDG8S6Li_lHX1HP1CLBcF0p-VDS6XavL_WcHEBVcSYAMzyRWY3cEO5emkRuFTQ=s320" width="320" /></a></div>タンク蓋部分。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhSnYihDBrBePoBXJyUVHUm7dfluCR-alFyJIXJG2PYfOqQtqSGAnMWinqvrOUgaHF3dXK0o2KJSDnAyMT8btHBhnSvOZ8gcTCy7sMOGuf35YTFZGGrY533eK-eUbRv2vFilV0lA0TwYIUvWtgVxjqQ126kzv0be4LsWR4AzAAiCa68mclDGZz0JKcM=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhSnYihDBrBePoBXJyUVHUm7dfluCR-alFyJIXJG2PYfOqQtqSGAnMWinqvrOUgaHF3dXK0o2KJSDnAyMT8btHBhnSvOZ8gcTCy7sMOGuf35YTFZGGrY533eK-eUbRv2vFilV0lA0TwYIUvWtgVxjqQ126kzv0be4LsWR4AzAAiCa68mclDGZz0JKcM=s320" width="320" /></a></div><p>煙突部分と水を通す部分のリングが外れます。</p><p>使用するとリングと煙突の下部にぐるりとカルキが付くので、こそげ落として掃除する感じになります。(ここにつくカルキはわりと取れやすいです。)<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjbDC6ngMbEH09HltRAcq0JogPF6XA7ndo1gvAGk2SvxKqmwaj8d8RB6u7v53UlrP0Q5WhxxxEF1I-hTT_iY9Zo41gVoavgZfKM5VjEffUEAr2pYfU4l7E8yv956Nfo4s8TSLzgw7t8B7P8HGTynXN6q-Igy3qL_b4kPcCeEKWY0ej-SheA74qbJ1BY=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjbDC6ngMbEH09HltRAcq0JogPF6XA7ndo1gvAGk2SvxKqmwaj8d8RB6u7v53UlrP0Q5WhxxxEF1I-hTT_iY9Zo41gVoavgZfKM5VjEffUEAr2pYfU4l7E8yv956Nfo4s8TSLzgw7t8B7P8HGTynXN6q-Igy3qL_b4kPcCeEKWY0ej-SheA74qbJ1BY=s320" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjRQZ0PVH3ua9racYHMQnFAElKbmjE3xWStpDBeDKXZBVS-SadJ2xAnV6oHxNijoM0GyBtFUlddMOFCkUzAdYItk7xIXiPkRxUqt0PeAHj6--HQixwdSAPe2FSJ4SoSDdDqhWAezP-z-Apgt5IIVguyD5yk0yaodOv8GKkucIrjvwF7MMJv9qT-oQVM=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjRQZ0PVH3ua9racYHMQnFAElKbmjE3xWStpDBeDKXZBVS-SadJ2xAnV6oHxNijoM0GyBtFUlddMOFCkUzAdYItk7xIXiPkRxUqt0PeAHj6--HQixwdSAPe2FSJ4SoSDdDqhWAezP-z-Apgt5IIVguyD5yk0yaodOv8GKkucIrjvwF7MMJv9qT-oQVM=s320" width="320" /></a></div><p></p><p>水蒸気をつくる底の熱源部分。</p><p>ここのカルキはとろうと思って取れる感じではありませんが、頭頂部分に溜まったカルキがたまにべろりと剥がれてきます。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhO3lKLJy-WBIZRptZ6b6FNoaT9ZUvqXS9fGtDgQcT_k_T4jwdsvCgo2JVgV2QvLfvCH6zLX2dB4pVT0TdM7e8he0w_AMLrBILzP1I2BwTMKVQWi1AN6XSNceT6HGANLIg6PVOd7U-LX-3gI5dCSVzU6-xQphEhzJ7PDSeWyOEcPYgdbune-oha4N3t=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhO3lKLJy-WBIZRptZ6b6FNoaT9ZUvqXS9fGtDgQcT_k_T4jwdsvCgo2JVgV2QvLfvCH6zLX2dB4pVT0TdM7e8he0w_AMLrBILzP1I2BwTMKVQWi1AN6XSNceT6HGANLIg6PVOd7U-LX-3gI5dCSVzU6-xQphEhzJ7PDSeWyOEcPYgdbune-oha4N3t=s320" width="320" /></a></div><p></p><p>水を受ける部分と熱源までの間に挟まる謎のプラスチック小物。</p><p>差し込む上下と前後の方向は決まっているのですが、片側が曲面でそれを目安に差し込もうとして、いつも逆に刺してしまいます。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiVaN4mlBKVXDelNnpAizb9Fjiuj6uCZVWhtZqNofg5-d-LCPEpyrOKCEbOzBau33BcoT7KMv_9Cko2lvtYi1iFB43pPYywYyCSQpZDUNnGReRqfptnolvdgoRrpNOi7SWckrPhOheyfh_R2BLfr-4JBUxW7CppwGjUZn1PMdh_IHiXWjB1iKMfRBT1=s4000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3000" data-original-width="4000" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEiVaN4mlBKVXDelNnpAizb9Fjiuj6uCZVWhtZqNofg5-d-LCPEpyrOKCEbOzBau33BcoT7KMv_9Cko2lvtYi1iFB43pPYywYyCSQpZDUNnGReRqfptnolvdgoRrpNOi7SWckrPhOheyfh_R2BLfr-4JBUxW7CppwGjUZn1PMdh_IHiXWjB1iKMfRBT1=s320" width="320" /></a></div><br /> <p></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-9401427586073283582021-10-24T10:44:00.000+09:002021-10-24T10:44:02.010+09:003DプリンタをPhoton Mono SEに買い替えました
<p>3DプリンタにPhoton-Sを使っていたのですが、Photon Mono SEに買い替えました。</p><p>印刷速度が上がっているという話で気になっており、価格が6万円とのことで更新を後回しにしていたのですが、印刷したいものが出来たのと、セールで値下げされてタイミングが良かったため購入することに。<br /><br />
<br /><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-x11613ia9UQ/YXS0-IZqkyI/AAAAAAAAJqg/GoFWq_IOJfAztHkFA3fFUI80PBHUpDWTQCLcBGAsYHQ/s2048/IMG_20210828_134330.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-x11613ia9UQ/YXS0-IZqkyI/AAAAAAAAJqg/GoFWq_IOJfAztHkFA3fFUI80PBHUpDWTQCLcBGAsYHQ/s320/IMG_20210828_134330.jpg" width="240" /></a></div><br /><br /><p><br />
</p><p>カタログスペック4倍、ただし実際の運用では倍速程度ではありますが、 いまどきはPCで3万円出せば実性能が倍になるということはありえないので、良い買い物だと思います。</p><p><br /><br />
</p><h2 style="text-align: left;">比較用のPhoton-S の写真<br /><br />
</h2><br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Hdi7SE2-ff0/YXSzQI-I2qI/AAAAAAAAJpc/UHHe5cqmpHMpUGD6HNpHhTHZFJQUOPIWACLcBGAsYHQ/s2048/IMG_20210615_140102.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-Hdi7SE2-ff0/YXSzQI-I2qI/AAAAAAAAJpc/UHHe5cqmpHMpUGD6HNpHhTHZFJQUOPIWACLcBGAsYHQ/s320/IMG_20210615_140102.jpg" width="240" /></a></div><p><br /><br />
Photon-Sでは初期には窓に遮光フィルムが貼られていなかったらしく、ユーザが貼るテクニックが紹介されていたのを読んだような気がします。</p><p>私が買った Photon-Sには最初からフィルムが張られていましたし、今回のPhoton Mono SEにも張られていました。<br /><br />
</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-mcDIGoAFaeU/YXSzQU3xBNI/AAAAAAAAJpg/VWbh2di5wwAEOY4RvYLrJenw61kZdAKTgCLcBGAsYHQ/s2048/IMG_20210615_140110.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-mcDIGoAFaeU/YXSzQU3xBNI/AAAAAAAAJpg/VWbh2di5wwAEOY4RvYLrJenw61kZdAKTgCLcBGAsYHQ/s320/IMG_20210615_140110.jpg" width="240" /></a></div><br /><br />
<p>SEでないPhoton Monoならば最初から安いのですが、前回Photon-Sで開閉式のカバーが都合がよかったため、SEをねらっていました。<br /><br />
</p><p><br />
</p>内部はこんな感じ。<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-vWKUItE3REk/YXSzQtttRtI/AAAAAAAAJpk/LIyL3sb8lKwR1602gBZx20gLtiGX8VJkQCLcBGAsYHQ/s2048/IMG_20210615_140129.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-vWKUItE3REk/YXSzQtttRtI/AAAAAAAAJpk/LIyL3sb8lKwR1602gBZx20gLtiGX8VJkQCLcBGAsYHQ/s320/IMG_20210615_140129.jpg" width="240" /></a></div><p><br /><br />
</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-jOmCdTqtBY4/YXSzQwruSfI/AAAAAAAAJpo/AGVYu-h09h84WSNu3V_1GMpUez93HNbjACLcBGAsYHQ/s2048/IMG_20210615_140132.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-jOmCdTqtBY4/YXSzQwruSfI/AAAAAAAAJpo/AGVYu-h09h84WSNu3V_1GMpUez93HNbjACLcBGAsYHQ/s320/IMG_20210615_140132.jpg" width="240" /></a></div><br /><br />
<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-EJGWhQsTrgI/YXSzRC5VCNI/AAAAAAAAJps/Do29ElKUwO4UyAHNXh71mpWkw2v4PsGtwCLcBGAsYHQ/s2048/IMG_20210615_140138.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-EJGWhQsTrgI/YXSzRC5VCNI/AAAAAAAAJps/Do29ElKUwO4UyAHNXh71mpWkw2v4PsGtwCLcBGAsYHQ/s320/IMG_20210615_140138.jpg" width="240" /></a></div><br /><br />
<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-46ajOF09eKc/YXSzRXyZ22I/AAAAAAAAJpw/3MBNZ0M3lLEUqaxuv5TQRtHQa4GW3W61wCLcBGAsYHQ/s2048/IMG_20210615_140154.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-46ajOF09eKc/YXSzRXyZ22I/AAAAAAAAJpw/3MBNZ0M3lLEUqaxuv5TQRtHQa4GW3W61wCLcBGAsYHQ/s320/IMG_20210615_140154.jpg" width="320" /></a></div><p><br /><br />
付属している印刷データ用のUSBメモリです。</p><p> </p><h2 style="text-align: left;">Photon Mono SEの写真 <br /><br />
</h2><p>まず箱を開くと、付属品と取り扱い説明書がお出迎えです。<br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-k-fLCz1PvOI/YXS08vICuoI/AAAAAAAAJqI/Qez0WIzER3IiMq7Jzs8qCVKm3gjOK0L9wCLcBGAsYHQ/s2048/IMG_20210828_133629.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-k-fLCz1PvOI/YXS08vICuoI/AAAAAAAAJqI/Qez0WIzER3IiMq7Jzs8qCVKm3gjOK0L9wCLcBGAsYHQ/s320/IMG_20210828_133629.jpg" width="240" /></a></div><p></p><p>Photon Mono SEの付属品もPhoton-Sの頃とあまり変わらず。
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-nvEbl2aPBv0/YXS08rbaf7I/AAAAAAAAJqQ/s-QQ5GfAwcoJrKkvTPqiLJuy-fimyqOPACLcBGAsYHQ/s2048/IMG_20210828_133743.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-nvEbl2aPBv0/YXS08rbaf7I/AAAAAAAAJqQ/s-QQ5GfAwcoJrKkvTPqiLJuy-fimyqOPACLcBGAsYHQ/s320/IMG_20210828_133743.jpg" width="320" /></a></div><p> </p><p>形状が似ているため、収納方法も同じです。<br /><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Na25t-Fp7kc/YXS08vZFh-I/AAAAAAAAJqM/I1q-J60F_CgPPn9lCXcS_bjJNuli6uluACLcBGAsYHQ/s2048/IMG_20210828_134015.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-Na25t-Fp7kc/YXS08vZFh-I/AAAAAAAAJqM/I1q-J60F_CgPPn9lCXcS_bjJNuli6uluACLcBGAsYHQ/s320/IMG_20210828_134015.jpg" width="320" /></a></div><p></p><p>本体を引き抜いたところ。足のための穴がクッションにあけられています。<br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Dm69mXXsB1Y/YXS09eMPtbI/AAAAAAAAJqU/0cTd6D8kEp8dAtMjM_E261U9w5pgrdccgCLcBGAsYHQ/s2048/IMG_20210828_134251.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-Dm69mXXsB1Y/YXS09eMPtbI/AAAAAAAAJqU/0cTd6D8kEp8dAtMjM_E261U9w5pgrdccgCLcBGAsYHQ/s320/IMG_20210828_134251.jpg" width="240" /></a></div><p></p><p>本体の裏側<br /><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-lPs4Z3Yg8zc/YXS09_O4O2I/AAAAAAAAJqY/Ce8aKYhODSUx8bSTEof0Zna5ZDWznZqaACLcBGAsYHQ/s2048/IMG_20210828_134258.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-lPs4Z3Yg8zc/YXS09_O4O2I/AAAAAAAAJqY/Ce8aKYhODSUx8bSTEof0Zna5ZDWznZqaACLcBGAsYHQ/s320/IMG_20210828_134258.jpg" width="320" /></a></div><p>この謎の端子ネジが、WiFi用のアンテナ取り付け場所になっています。<br /></p><p><br />
</p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-CLKTsu0ywTo/YXS0-Jfyz0I/AAAAAAAAJqc/ZWB7B-Teyswetmc4fiSqqJqa5Zwu3bvDQCLcBGAsYHQ/s2048/IMG_20210828_134304.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-CLKTsu0ywTo/YXS0-Jfyz0I/AAAAAAAAJqc/ZWB7B-Teyswetmc4fiSqqJqa5Zwu3bvDQCLcBGAsYHQ/s320/IMG_20210828_134304.jpg" width="320" /></a></div><p></p><p>操作パネル。<br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-s_XNuoZgYxY/YXS0-oOU1pI/AAAAAAAAJqo/mHUIJyxjOpgkRwTjV8X2I9XOjPv-5OEiQCLcBGAsYHQ/s2048/IMG_20210828_134334.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-s_XNuoZgYxY/YXS0-oOU1pI/AAAAAAAAJqo/mHUIJyxjOpgkRwTjV8X2I9XOjPv-5OEiQCLcBGAsYHQ/s320/IMG_20210828_134334.jpg" width="320" /></a></div><p></p><p>配送された段階では、まだ取っ手がついていないため、最初に開けるのに難儀します。</p><p>用途が違いますが、付属のスクレイパーでむりやりこじあけました。</p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-zOPBHGCb6S0/YXS0-jGz2OI/AAAAAAAAJqk/51m_Uq_uDcIOW1BsnJ-IcsmpsHLhpxYuQCLcBGAsYHQ/s2048/IMG_20210828_134435.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-zOPBHGCb6S0/YXS0-jGz2OI/AAAAAAAAJqk/51m_Uq_uDcIOW1BsnJ-IcsmpsHLhpxYuQCLcBGAsYHQ/s320/IMG_20210828_134435.jpg" width="240" /></a></div><p></p><p>クッションが中に詰まっているのも懐かしい感じです。<br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-0phsTvIE3s0/YXS0-2qBaNI/AAAAAAAAJqs/xmq80Ox5Xro7bywOxAeSCZjjR4Dm75FDQCLcBGAsYHQ/s2048/IMG_20210828_134528.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-0phsTvIE3s0/YXS0-2qBaNI/AAAAAAAAJqs/xmq80Ox5Xro7bywOxAeSCZjjR4Dm75FDQCLcBGAsYHQ/s320/IMG_20210828_134528.jpg" width="320" /></a></div><br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ZtiAq9OSR_s/YXS0_b7EOiI/AAAAAAAAJq0/1-vzjl4rlEQ6mi2lnE3Yg4a5hPq3W2cMACLcBGAsYHQ/s2048/IMG_20210828_134542.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-ZtiAq9OSR_s/YXS0_b7EOiI/AAAAAAAAJq0/1-vzjl4rlEQ6mi2lnE3Yg4a5hPq3W2cMACLcBGAsYHQ/s320/IMG_20210828_134542.jpg" width="240" /></a></div><p><br /></p><p>そしてクッションに埋まっている印刷台座。<br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-SGO1sadm0FE/YXS0_VebqYI/AAAAAAAAJqw/ssDCQfjQS7sCeNsNoK7Wt8vKlXGHVGyBQCLcBGAsYHQ/s2048/IMG_20210828_134552.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-SGO1sadm0FE/YXS0_VebqYI/AAAAAAAAJqw/ssDCQfjQS7sCeNsNoK7Wt8vKlXGHVGyBQCLcBGAsYHQ/s320/IMG_20210828_134552.jpg" width="240" /></a></div><br />レジンバット。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-TzFeDmFhCdw/YXS0_ra9YVI/AAAAAAAAJq4/3D6v-YNm5bcK5ZoHcCmkgOjM3WpI9R4ggCLcBGAsYHQ/s2048/IMG_20210828_134635.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-TzFeDmFhCdw/YXS0_ra9YVI/AAAAAAAAJq4/3D6v-YNm5bcK5ZoHcCmkgOjM3WpI9R4ggCLcBGAsYHQ/s320/IMG_20210828_134635.jpg" width="240" /></a></div><p></p><p>今回はレジンを濾すためのフィルタまでついてきました。たぶんPhoton-Sにはついてきていなかったはず。</p><p> </p><p>奇しくも、Photon-Sを初導入した際に自分で追加購入したのとほぼ同じタイプのフィルタでした。</p><p>(そちらがまだ残っているので、まだそちらを使いつづけますが。) <br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-BpBDoBzF9Oc/YXS1AD4E2NI/AAAAAAAAJrA/N6KYjIwSqAgnXI-wHnOSbCxGwRhZlfgUACLcBGAsYHQ/s2048/IMG_20210828_134644.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-BpBDoBzF9Oc/YXS1AD4E2NI/AAAAAAAAJrA/N6KYjIwSqAgnXI-wHnOSbCxGwRhZlfgUACLcBGAsYHQ/s320/IMG_20210828_134644.jpg" width="240" /></a></div><p></p>紫外線モノクロLCDパネル。<p>保護フィルムが 張ってあるので剥がします。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-GmZhHtu0JkM/YXS1AQYycMI/AAAAAAAAJrE/GLOv_HX6c2E4pn4PafiWwBeM0wWWPqTTQCLcBGAsYHQ/s2048/IMG_20210828_134859.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-GmZhHtu0JkM/YXS1AQYycMI/AAAAAAAAJrE/GLOv_HX6c2E4pn4PafiWwBeM0wWWPqTTQCLcBGAsYHQ/s320/IMG_20210828_134859.jpg" width="320" /></a></div><p></p><p>レジンバットを設置。
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ZkMcVAE8gEs/YXS1A9O6nnI/AAAAAAAAJrI/nDXBexR5PIMRUVk-hA_TBESRCekK-BciQCLcBGAsYHQ/s2048/IMG_20210828_135014.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-ZkMcVAE8gEs/YXS1A9O6nnI/AAAAAAAAJrI/nDXBexR5PIMRUVk-hA_TBESRCekK-BciQCLcBGAsYHQ/s320/IMG_20210828_135014.jpg" width="240" /></a></div><br /><p>レジンバットを設置してみたところ。</p><p>ちょっと気になる凹凸はある気がしたものの、フィルムも穴あきなどはなく、この後印刷も問題なく上手くいきました。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-O04Q5RO1dSI/YXS1AH1Wr5I/AAAAAAAAJq8/GWVVDNsW0-E1NoN2DxSVtoFphvXm5ZH4wCLcBGAsYHQ/s2048/IMG_20210828_134707.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-O04Q5RO1dSI/YXS1AH1Wr5I/AAAAAAAAJq8/GWVVDNsW0-E1NoN2DxSVtoFphvXm5ZH4wCLcBGAsYHQ/s320/IMG_20210828_134707.jpg" width="320" /></a></div><p><br /></p><p>WiFiアンテナ。</p><p>設定すると、印刷の進捗をスマホから確認するなどができるのですが、一応設置したものの、スマホ接続は使っていません。</p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-elTkhFwjTlU/YXS1BOoFSOI/AAAAAAAAJrM/K98PS7YOWTU4ApJKzfUPo3QxF1HLIHprwCLcBGAsYHQ/s2048/IMG_20210828_135135.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-elTkhFwjTlU/YXS1BOoFSOI/AAAAAAAAJrM/K98PS7YOWTU4ApJKzfUPo3QxF1HLIHprwCLcBGAsYHQ/s320/IMG_20210828_135135.jpg" width="240" /></a></div><p></p><p>本体を組み立てて設置、電源を入れたところ。</p><p>タッチパネルの画面も、操作性含めPhoton-Sと同じ。
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-fIRromtdahI/YXS1BWy9NJI/AAAAAAAAJrQ/tobRA3GyRegYu6G4kbHS2KDPYtfRy7p8QCLcBGAsYHQ/s2048/IMG_20210828_143740.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-fIRromtdahI/YXS1BWy9NJI/AAAAAAAAJrQ/tobRA3GyRegYu6G4kbHS2KDPYtfRy7p8QCLcBGAsYHQ/s320/IMG_20210828_143740.jpg" width="240" /></a></div><br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-u_jB17qWeTs/YXS1Bu2IFsI/AAAAAAAAJrU/vTA5bHPNeJEWN8MbkFivp_TOduAuKczewCLcBGAsYHQ/s2048/IMG_20210828_175706.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-u_jB17qWeTs/YXS1Bu2IFsI/AAAAAAAAJrU/vTA5bHPNeJEWN8MbkFivp_TOduAuKczewCLcBGAsYHQ/s320/IMG_20210828_175706.jpg" width="240" /></a></div><br />テスト印刷の結果。問題ありませんでした。<br />
<p></p><p> </p><p></p><p></p><p>見た目も、内部もおおむねPhoton-Sと同じ。</p><p>印刷速度だけ早くなるので、アップグレードとしてとても良いです。</p><p> </p><h2 style="text-align: left;">Photon Mono SE(Photon Monoシリーズ)の印刷速度</h2><p> Photon Monoシリーズの印刷速度ですが、Anycubic公式が動画で比較を上げています。</p><p><a href="https://www.youtube.com/watch?v=Pt2VkMhQwzQ">https://www.youtube.com/watch?v=Pt2VkMhQwzQ</a><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Uw6Tt8Fb8Sw/YXS5x0htb2I/AAAAAAAAJsA/YfCv9VOaZX0-OG2HYTodMbL2DEHRVf3VwCLcBGAsYHQ/s1777/Screenshot%2Bfrom%2B2021-10-21%2B23-03-19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1615" data-original-width="1777" height="291" src="https://1.bp.blogspot.com/-Uw6Tt8Fb8Sw/YXS5x0htb2I/AAAAAAAAJsA/YfCv9VOaZX0-OG2HYTodMbL2DEHRVf3VwCLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2021-10-21%2B23-03-19.png" width="320" /></a></div><br /><p><br /></p><p>左からPhoton Mono SE、Photon mono X、Photon monoの順です。 </p><br />
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08RYSNFVD&linkId=1f375e6722bbb75cfdbff7bb865b0ffe&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr">
</iframe>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08KXVVRYZ&linkId=f315746df0c1aed93b694d845f656757&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr">
</iframe>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08K4MFNHG&linkId=b1dbcaf1bc4ed49a204b0f625e74c075&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr">
</iframe>
MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-89352279660628720562021-10-23T20:58:00.003+09:002021-10-24T09:42:57.063+09:00透明ティーポットの思いがけない罠<p></p><p>もうそろそろ寒い季節になるし、 ということで温かい飲み物を家で飲むためにティーポットを購入しました。</p><br /> <p>購入したのはプラスチック製なので、落としたりしてもかんたんには割れない。 <br /></p><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-3CnzfEcWm0Y/YXP3I8MxaGI/AAAAAAAAJow/ETq8eoYVtnQOVwozj8YGW49vge0GF9hKQCLcBGAsYHQ/s2048/IMG_20210409_183327.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-3CnzfEcWm0Y/YXP3I8MxaGI/AAAAAAAAJow/ETq8eoYVtnQOVwozj8YGW49vge0GF9hKQCLcBGAsYHQ/s320/IMG_20210409_183327.jpg" width="320" /></a></div><br /><p>茶葉用のスプーンもついてきました。葉っぱ型で可愛いけれど使い方がよくわからない。</p><p><br /><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-fgktp08oAXk/YXP3Iw_tBFI/AAAAAAAAJos/sA8MsntJPyIjF5kDKiyRHndWgJNzGWy9wCLcBGAsYHQ/s2048/IMG_20210409_183301.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-fgktp08oAXk/YXP3Iw_tBFI/AAAAAAAAJos/sA8MsntJPyIjF5kDKiyRHndWgJNzGWy9wCLcBGAsYHQ/s320/IMG_20210409_183301.jpg" width="320" /></a></div><p></p><p><br /></p><p>くせのない中国茶などを買って飲んでいます。 <br /></p><p> </p><p>ところで透明なティーポットを買ったのは、中身が見えて茶葉の開き具合が一発で確認できるので飲み頃がわかる、と思ったのですが。</p><p><br /></p><p><a href="https://1.bp.blogspot.com/-CQNusCPlOoo/YXP3JLMiFqI/AAAAAAAAJo0/uKRIstwMKRAlGOTXcHTZST0PpevTmVJ0QCLcBGAsYHQ/s2048/IMG_20210410_092727.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-CQNusCPlOoo/YXP3JLMiFqI/AAAAAAAAJo0/uKRIstwMKRAlGOTXcHTZST0PpevTmVJ0QCLcBGAsYHQ/s320/IMG_20210410_092727.jpg" width="240" /></a></p><p>上から見ると、湯気の結露でくもって、茶葉の様子が見えないのでした。<br /></p><p>机の上に置いてある急須を、わざわざ横から見ないですし。</p><p>(わざわざ持ち上げないといけない。)<br /></p><p><br /></p><p>とはいえデメリットというほどでもなく、横からはいくらか見えますし、ふつうに使えて軽くて丈夫で洗いやすくて便利です。</p><p>というわけで目論見は外れましたが、洗いやすさや中の広さ(で茶葉が広がりやすい)など、買ってよかったです。</p><p><br /></p><p><br /></p><p></p>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B01N3AHXHH&linkId=7aa9f75401ef6a43a962c788b096e9b4&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B07FKN876W&linkId=068a4e22adf7c3c57cccdf21f8214cc3&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-77433320994049588562021-10-23T20:48:00.003+09:002021-10-23T20:48:36.895+09:00掃除ロボット Kyvol E20 を購入(WiFi対応)
<p>Kyvol E20を購入しました。</p><p>掃除ロボット初導入したILIFE V3 Liteを2年ほど使っていたのですが、もうそろそろ買い替え時期かなというのと、せっかくなのでWiFi対応機種を使ってみたかったので。</p><p> <br /><br />
</p><p> </p><p></p><p></p><p><a href="https://1.bp.blogspot.com/-cshu9hhRQRM/YXPztDS8CdI/AAAAAAAAJng/OG1_CA6QpXIOHm6Nh9jreknBZ1jqel1GwCLcBGAsYHQ/s2048/IMG_20210409_190632.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-cshu9hhRQRM/YXPztDS8CdI/AAAAAAAAJng/OG1_CA6QpXIOHm6Nh9jreknBZ1jqel1GwCLcBGAsYHQ/s320/IMG_20210409_190632.jpg" width="320" /></a> </p><p> 箱を開けるとこんな感じで入っています。
<br /><br />
</p><p></p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-2YOABb4E_Hc/YXPzsWZQy8I/AAAAAAAAJnY/AKR8fJI8nkoao62PENaUGFlzmgjRTbucACLcBGAsYHQ/s2048/IMG_20210409_190534.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-2YOABb4E_Hc/YXPzsWZQy8I/AAAAAAAAJnY/AKR8fJI8nkoao62PENaUGFlzmgjRTbucACLcBGAsYHQ/s320/IMG_20210409_190534.jpg" width="240" /></a></div><p></p><p><br /><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-nhfbdHad4fA/YXPzsC4AfDI/AAAAAAAAJnU/nCTdITfmtxE8acas5BJiSaFUeh733GMIQCLcBGAsYHQ/s2048/IMG_20210409_190624.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-nhfbdHad4fA/YXPzsC4AfDI/AAAAAAAAJnU/nCTdITfmtxE8acas5BJiSaFUeh733GMIQCLcBGAsYHQ/s320/IMG_20210409_190624.jpg" width="240" /></a></div><p><br /><br />箱の中にダンボール製のカバー。</p><p> </p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Qa21V02bigw/YXPztoenqaI/AAAAAAAAJnk/dkCvHpc2OL0K5MwMvZAtrsOdswjr3JiVwCLcBGAsYHQ/s2048/IMG_20210409_190710.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-Qa21V02bigw/YXPztoenqaI/AAAAAAAAJnk/dkCvHpc2OL0K5MwMvZAtrsOdswjr3JiVwCLcBGAsYHQ/s320/IMG_20210409_190710.jpg" width="240" /></a></div><p></p><p>こんな状態で入っています。<br /><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-dSyfDn1O38Y/YXPzt06qwsI/AAAAAAAAJns/FzZ5u4Ddb-QGqRpZGZEWZm_PoUyq18TnACLcBGAsYHQ/s2048/IMG_20210409_190745.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-dSyfDn1O38Y/YXPzt06qwsI/AAAAAAAAJns/FzZ5u4Ddb-QGqRpZGZEWZm_PoUyq18TnACLcBGAsYHQ/s320/IMG_20210409_190745.jpg" width="240" /></a></div><p></p><p>裏側はこういう状態で、オレンジの開口部は開いてローラーを取り出すことができます。<br /><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-eQBrzyep8mo/YXPzt8vryxI/AAAAAAAAJno/B2Jm4egE508YmYww0T4phEnliNvvEMvfQCLcBGAsYHQ/s2048/IMG_20210409_190749.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-eQBrzyep8mo/YXPzt8vryxI/AAAAAAAAJno/B2Jm4egE508YmYww0T4phEnliNvvEMvfQCLcBGAsYHQ/s320/IMG_20210409_190749.jpg" width="240" /></a></div><br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-5nNMUNGkP2w/YXPzupBFhBI/AAAAAAAAJnw/3aD7sEbB9kkAwQ7jMcE4-eu6Ywza00KswCLcBGAsYHQ/s2048/IMG_20210409_190831.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-5nNMUNGkP2w/YXPzupBFhBI/AAAAAAAAJnw/3aD7sEbB9kkAwQ7jMcE4-eu6Ywza00KswCLcBGAsYHQ/s320/IMG_20210409_190831.jpg" width="240" /></a></div><p></p><p>この回転ブラシが、無理な力がかかると外れるので良いのですが、ちょっと力がかかるとすぐ外れるので、2回に1回くらいは部屋のどこかにこれがおちている状況になります。</p><p><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-9-c7pCJTlkc/YXPzu3ZTTvI/AAAAAAAAJn0/JvAesxgRTZYpqFohOeUYimgx_vP9rOjqQCLcBGAsYHQ/s2048/IMG_20210409_190851.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-9-c7pCJTlkc/YXPzu3ZTTvI/AAAAAAAAJn0/JvAesxgRTZYpqFohOeUYimgx_vP9rOjqQCLcBGAsYHQ/s320/IMG_20210409_190851.jpg" width="320" /></a></div><p></p><p></p><p>電源ボタンが下面にあります。</p><p>これまで使っていて、障害物でおされて電源OFF、という自体にはいちどもなっていません。<br /></p><p>わざわざ指差すシールで示してくれる丁寧さ。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-VmenxPZ_0c4/YXPzu8xPDcI/AAAAAAAAJn4/jWSv9gNXfZIQ2sjTO4jiKHDU0rxQ5YOdACLcBGAsYHQ/s2048/IMG_20210409_190855.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-VmenxPZ_0c4/YXPzu8xPDcI/AAAAAAAAJn4/jWSv9gNXfZIQ2sjTO4jiKHDU0rxQ5YOdACLcBGAsYHQ/s320/IMG_20210409_190855.jpg" width="320" /></a></div><p></p><p></p><p>吸入口。</p><p>白いのは金属の針金です。滑落防止かなにか。</p><p><br />
</p><p>充電ベース。これに戻ってくる確率は、半分前後といったところ。
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-52UWrx1Vq2A/YXPzvaRLzYI/AAAAAAAAJn8/8d6KPY96lVQyUP_BPCQhwtUsj9He42ZAwCLcBGAsYHQ/s2048/IMG_20210409_191101.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-52UWrx1Vq2A/YXPzvaRLzYI/AAAAAAAAJn8/8d6KPY96lVQyUP_BPCQhwtUsj9He42ZAwCLcBGAsYHQ/s320/IMG_20210409_191101.jpg" width="320" /></a></div><br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-TjcYp6zbwbs/YXPzvjSkUZI/AAAAAAAAJoA/sYzAz5ME9Pk8o-VYeYcobcOe6hkyQuoYwCLcBGAsYHQ/s2048/IMG_20210409_191109.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-TjcYp6zbwbs/YXPzvjSkUZI/AAAAAAAAJoA/sYzAz5ME9Pk8o-VYeYcobcOe6hkyQuoYwCLcBGAsYHQ/s320/IMG_20210409_191109.jpg" width="320" /></a></div><p><br /></p><p>磁性テープ的なものが入っていて、どうやら進入禁止ラインを引くのに使うらしいのですが、私は使っていません。<br />
</p><p><br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Q3iZpJnOVR4/YXPzvuBGsHI/AAAAAAAAJoE/yrwx9M6vAqgFPb2YSYk_ktA9NQ9COusVQCLcBGAsYHQ/s2048/IMG_20210409_191339.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-Q3iZpJnOVR4/YXPzvuBGsHI/AAAAAAAAJoE/yrwx9M6vAqgFPb2YSYk_ktA9NQ9COusVQCLcBGAsYHQ/s320/IMG_20210409_191339.jpg" width="320" /></a></div><p><br /></p><p>たぶん清掃具。<br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-f8SMZtv5veI/YXPzwZZ_jdI/AAAAAAAAJoI/p3SVIaL2iI4o0AnRGqut1Y8fZuYqXYU2QCLcBGAsYHQ/s2048/IMG_20210409_191613.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-f8SMZtv5veI/YXPzwZZ_jdI/AAAAAAAAJoI/p3SVIaL2iI4o0AnRGqut1Y8fZuYqXYU2QCLcBGAsYHQ/s320/IMG_20210409_191613.jpg" width="320" /></a></div><br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-GQ8NEUAQ7mE/YXPzwYEuDvI/AAAAAAAAJoQ/yPDoELd6VPIpzAGyvOr_D4RLhL8NQPNdACLcBGAsYHQ/s2048/IMG_20210409_191627.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://1.bp.blogspot.com/-GQ8NEUAQ7mE/YXPzwYEuDvI/AAAAAAAAJoQ/yPDoELd6VPIpzAGyvOr_D4RLhL8NQPNdACLcBGAsYHQ/s320/IMG_20210409_191627.jpg" width="320" /></a></div><p><br /></p><p>WiFi接続してアプリから制御できます。</p><p>画像は接続の様子。いちどOS設定からWiFiを2.4Ghzでつなぎ直す必要があります。<br />
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-PrSUwQ_ieC0/YXPzwrvuo5I/AAAAAAAAJoM/3fvVfMX_Jcg_nIsH920cmxjZKUR4TdeMgCLcBGAsYHQ/s2340/Screenshot_2021-04-09-19-21-57-385_com.wantuo.kyvol.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2340" data-original-width="1080" height="320" src="https://1.bp.blogspot.com/-PrSUwQ_ieC0/YXPzwrvuo5I/AAAAAAAAJoM/3fvVfMX_Jcg_nIsH920cmxjZKUR4TdeMgCLcBGAsYHQ/s320/Screenshot_2021-04-09-19-21-57-385_com.wantuo.kyvol.jpg" width="148" /></a></div><br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ECpKIRl91kU/YXPzsGTCU0I/AAAAAAAAJnc/5-u4SwUM4_4P061yGAR9_7t4xEdI5NXVQCLcBGAsYHQ/s2048/IMG_20210409_190541.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-ECpKIRl91kU/YXPzsGTCU0I/AAAAAAAAJnc/5-u4SwUM4_4P061yGAR9_7t4xEdI5NXVQCLcBGAsYHQ/s320/IMG_20210409_190541.jpg" width="240" /></a></div><p><br /><br /> 安くWiFi対応機種で外出先から掃除開始が可能なロボット掃除機として、かなり気に入っています。</p><p>リモコンからタイマ設定もできますが、モバイルアプリから設定すると、週の曜日ごとに異なる起動時間を設定することもできました。土日と平日で掃除の時間を変更できます。</p><p> </p><p> <br /></p><p><br /></p>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B09B6XWN5H&linkId=cd09558a294bd2870649ed7c6210e21f&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08F7TY9YQ&linkId=b33e95294b6b7bf4e5b9bcd929321691&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-38706440461872047932021-10-15T15:37:00.007+09:002022-03-10T01:03:10.408+09:00Blenderの Apply Modifier ボタン/Apply All Modifierメニュー がなくなった( blender 2.93.5, blender 3.0.1 )<p> 手元の2.93.5で、Blenderから"Apply Modifier"ボタンが無くなっていました。<br />同じく手元にある中では、2.90.1では存在しているので、最近(?)なくなったようです。<br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-VwJZ6sJnhjw/YWkhlUjg2uI/AAAAAAAAJeA/DMspN-8BVlE5GSRlimgiQr09lgkPY-q-ACLcBGAsYHQ/blender_ApplyAllModifier.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1300" data-original-width="1481" height="240" src="https://lh3.googleusercontent.com/-VwJZ6sJnhjw/YWkhlUjg2uI/AAAAAAAAJeA/DMspN-8BVlE5GSRlimgiQr09lgkPY-q-ACLcBGAsYHQ/blender_ApplyAllModifier.png" width="273" /></a></div><br /><br /><a href="https://blender.stackexchange.com/questions/17733/apply-modifiers-button-not-appearing">https://blender.stackexchange.com/questions/17733/apply-modifiers-button-not-appearing</a><br /><a href="https://www.reddit.com/r/blenderhelp/comments/iob46k/blender_29_modifiers_have_no_apply_button/">https://www.reddit.com/r/blenderhelp/comments/iob46k/blender_29_modifiers_have_no_apply_button/</a><br /><br />メニューから複数Objectの全ModifierをまとめてApplyできる "Apply All Modifier" もなくなっているようです。<br />(メニューの Object > Apply > Apply All Modifier )<br /><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-9lf7GVkg4os/YWkhjvC-tzI/AAAAAAAAJd8/64J4z-mq5VoPw4wBDu4NjY4IWbUx7tk_ACLcBGAsYHQ/blender_ApplyAllModifier%2Bmenu.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1533" data-original-width="1362" height="240" src="https://lh3.googleusercontent.com/-9lf7GVkg4os/YWkhjvC-tzI/AAAAAAAAJd8/64J4z-mq5VoPw4wBDu4NjY4IWbUx7tk_ACLcBGAsYHQ/blender_ApplyAllModifier%2Bmenu.png" width="213" /></a></div><p><br /><br />3Dプリントデータを作るために、Apply All Modifier を便利遣いしていたので無くなると困ります。<br />ModifierにはSTLファイルに書き出した形状データに反映されない効果もあるため、3Dプリンタ用に書き出すにはModifierをApplyでObject形状に変換しておく必要があるからです。<br />(より正確には、Booleanで穴をあけている場合に必要な処置。<br />STLエクスポートを使うと、Boolean Modifierで穴あけするための非表示の穴Objectも3Dプリント出力されてしまう。<br />そのため事前に削除しておく必要があるが、穴Objectがなくなると穴もなくなるので、事前にApply Modifierが必要。)<br /><br /><br />## Apply Modifierする他の方法:<br />ModifierのApply自体はできるのですが、Object、Modifierそれぞれ1つずつ適用する方法ばかりで、一括でまとめてApplyする方法は見つかりませんでした。<br /><br />**Modifierの右上にあるドロップダウンから**<br />これまでもあったもの。<br />画面右のModifier一覧の対象Modifierを1つずつApplyする。<br /><br />**Modifierの上にマウスカーソルを置いてCtrl+A**<br />文字通り画面右のModifier一覧の対象Modifierから1つ選んでApplyする。</p><p><br /></p><p>URL先に書いてある「ALT+C」ショートカットは機能しなかったのですが、右クリックから同じ機能と思われるメニューを開いて操作することができました。<br /></p><p><a href="https://blender.stackexchange.com/questions/3488/is-it-possible-to-apply-modifiers-to-multiple-objects-at-once">https://blender.stackexchange.com/questions/3488/is-it-possible-to-apply-modifiers-to-multiple-objects-at-once</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-n3AYrHtfHmU/YWkklfhMKVI/AAAAAAAAJeY/e9CMaoOJenUhKU48z8l5VdXplEWL1ZA5ACLcBGAsYHQ/s1320/blender_ApplyAllModifier%2Bcontextmenu.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1212" data-original-width="1320" height="294" src="https://1.bp.blogspot.com/-n3AYrHtfHmU/YWkklfhMKVI/AAAAAAAAJeY/e9CMaoOJenUhKU48z8l5VdXplEWL1ZA5ACLcBGAsYHQ/s320/blender_ApplyAllModifier%2Bcontextmenu.png" width="320" /></a></div><br /><p><br /><br />## 備考<br /><br />(single usedなど適用してから)Aで全選択 -> Object > Apply > Apply All Modifier としていたのですが、<br />もしかしてバグ動作だったのだろうか。</p><p> </p><p></p><p>## 追記</p><p>Blender 3.0あたりからは、さらに変更されて以下のように。</p><p>(single usedなど適用してから)Aで全選択 -> Object>Convert>Mesh<br />(Blender 3.0.1 にて確認)<br /><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiBdhEcAz1_CPt8oNETEG9kIyzUVeWLKvlQvI40gd4YFdlC1aFCs9Zgr0JB-npPLNiokYSHdyEePCjy9SIHTfinnvB1tyuveFB66W2DiC7v90OyxtLCYocbU2j5pHULPmikEBQHSXx7mI3lQ2XswapSQEqvEDfl2HRLmvrf4Z1_hwaB3jBBObol-lT9=s3708" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2110" data-original-width="3708" height="182" src="https://blogger.googleusercontent.com/img/a/AVvXsEiBdhEcAz1_CPt8oNETEG9kIyzUVeWLKvlQvI40gd4YFdlC1aFCs9Zgr0JB-npPLNiokYSHdyEePCjy9SIHTfinnvB1tyuveFB66W2DiC7v90OyxtLCYocbU2j5pHULPmikEBQHSXx7mI3lQ2XswapSQEqvEDfl2HRLmvrf4Z1_hwaB3jBBObol-lT9=s320" width="320" /></a></div><br /><p></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-52977236025857546952021-10-10T19:31:00.003+09:002021-10-10T19:31:32.268+09:00BlenderでBezierパスのMesh法線が反転できないとき<p>Bebelと組み合わせることで、Bezierのパスから厚みのあるObjectを作成できます。</p><p>しかし Mesh法線が反対になっていることがあります。<br /></p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-pz2YimKZvRE/YWLAZXKXTiI/AAAAAAAAJWM/XyenwUXtcrwA3yIJLbm_7BbIiCGQl_fYACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-10%2B17-46-43.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-pz2YimKZvRE/YWLAZXKXTiI/AAAAAAAAJWM/XyenwUXtcrwA3yIJLbm_7BbIiCGQl_fYACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-10%2B17-46-43.png" width="320" /></a></div><br /><br /><p></p><p>法線は ViewPortOverray / Geometory / Face Orientation で確認できます。</p><p>通常Objectであれば、EditMode でMesh>Normals>Filpで反転して修正することができます。</p><p>ですが BezierのパスにはMeshがないためかMeshのメニューが表示されず反転操作ができません。</p><p> </p><p>解決策ですが、厚みを作っているBebelに指定したBezierObjectの回転方向を逆にします。</p><p>(Bezierを構成する点に番号が振ってあるとして、それを逆にするイメージ。) <br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-U10SRA2atTg/YWLAdGBWLbI/AAAAAAAAJWQ/6K7LlgEPpBU-uaXozmTYt9XjAs5uPyqFACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-10%2B17-46-49.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-U10SRA2atTg/YWLAdGBWLbI/AAAAAAAAJWQ/6K7LlgEPpBU-uaXozmTYt9XjAs5uPyqFACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-10%2B17-46-49.png" width="320" /></a></div>スクリーンショットを拡大すると、上部にベジエがあるのがわかると思います。<p></p><p></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;">最初の</div><div style="display: none; font-size: 100%;"></div></div><p></p><p>最初の画像と次の画像で選択しているのは同じ点で、位置を画像のように移動することで、法線の向きが解消されています。</p><p>(ただし中心位置から形状がずれたので、下のパスObjectの形・位置も少し変わっている。)</p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><p></p>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-67637939437835028272021-10-05T00:31:00.008+09:002021-10-05T00:31:56.928+09:00漢数字文字列のもう一歩実用的な数値変換 - その2<p> 前のブログ記事では、数字をあらわす漢数字と大字の文字列について、あつかうための前処理とパタン、また変換のさいに考慮しなければならない細則について書きました。<br />ここから実際に文字列から数値へ変換をおこなっていきます。<br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-f8VdvOFl-2U/YVsdsIMG4XI/AAAAAAAAJLk/yfvte0uSF68QF1Tcy6MxdC0VaTQYMVDNwCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-10%2B20-27-05---.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="694" data-original-width="1228" height="181" src="https://lh3.googleusercontent.com/-f8VdvOFl-2U/YVsdsIMG4XI/AAAAAAAAJLk/yfvte0uSF68QF1Tcy6MxdC0VaTQYMVDNwCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-10%2B20-27-05---.png" width="320" /></a></div><br /><br />実装はJavaScriptで行いました。<br />これはWebExtensionsによるブラウザ拡張がJavaScriptだからです。<br /><p></p><p> <a href="https://addons.mozilla.org/ja/firefox/addon/daisy-warekiconv/">daisy WarekiConv 和暦を西暦へ自動変換するFireFoxアドオン </a></p><a href="https://chrome.google.com/webstore/detail/daisy-warekiconv/ckcedomogohijbfmcdnoaoeeoonabnbd">daisy WarekiConv 和暦を西暦へ自動変換するChromeアドオン</a><p><br />JavaScriptにない機能を実装していくことになります。<br />つまり、parseInt()の漢数字版のようなものを、自分で実装することになります。<br /><br />つまり、こういうことになります。<br />- 文字列中にある漢数字による桁と数を、それぞれ数値と桁のべき指数に変換する。<br />- それを順に足し合わせるなどして、文字列全体が表す数を得る。<br />- なお、漢数字文字列の桁のありなしを判定して処理をわける。<br /><br /><br />## 桁ごとの桁文字、数字文字の変換<br />'百'、'千'といった桁の文字、'壱'、'九'といった数字の文字を、それぞれ桁や数に変換します。<br /><br />漢数字による数字文字の変換は、とうぜんJavaScriptの言語機能にはないので実装しています。<br /><br />なお今回のプロジェクトでは、<br />- 数字文字の変換は cKanSuuzi2Int()<br />- 桁文字の変換は cKanSuuziKeta2Int()<br />で行っています。<br /><br /><br />// 漢数字(桁漢字なし)<br />```<br /><span style="font-family: courier;">function cKanSuuzi2Int(cKanSuuzi)<br />{<br /> const res0 = kanSuuziNumChars.indexOf(cKanSuuzi);<br /> if(-1 !== res0){<br /> return res0;<br /> }<br /> const res1 = daiziNumChars.indexOf(cKanSuuzi);<br /> if(-1 !== res1){<br /> return res1;<br /> }<br /> const res2 = daiziNumOtherCharPairs[cKanSuuzi];<br /> if(undefined !== res2){<br /> return res2;<br /> }<br /> const res3 = kanSuuziOtherCharPairs[cKanSuuzi];<br /> if(undefined !== res3){<br /> return res3;<br /> }<br /> return -1;<br />}</span><br />```<br /><br />番号に並べてindexOfで返ってきた値をそのまま使う、というのがC言語ネイティブの書いたC的コードという感じがします。<br />(意味としては違うが数字は合っている。)<br /><br />桁の変換も同じです。<br />桁の場合は、10のべき乗ということで、べき指数を返させています。<br />たとえば’千’の場合は3を返させて、使う側は10の3乗をして1000を得る、といったやり方をしています。<br />(JavaScriptでは`10 ** 3`という記法でべき乗計算できる。)<br /><br /><br />## 漢数字文字列を実際に数値へ変換する<br />『桁の有無』はこれにより数値への変換ロジックを切り替える必要があり、重要です。<br />判定方法としては、これもまた単純に、桁の文字を変数にあつめておいて正規表現で検出です。<br />ひとつでも桁を表す文字が含まれていれば桁有り、そうでなければ桁なしです。<br /><br />『漢数字』『大字』は同じ数字表記のなかで混交しない雰囲気なのですが、分けておかなくても困らないのでチェックはせず、そのまま混在で判定しています。<br /><br /><br />### 桁なし漢数字文字列の変換<br />単純に、頭から1文字ずつ数値変換しながら10をかけて桁上がりさせていくだけです。<br />途中にゼロが入っていたりしても、専用の分岐処理がいりません。<br /><br />コードも必要ないけれど全文引用してしまうくらい短いです。<br />```<br /><span style="font-family: courier;">function convKanSuuziStr2Int(sKanSuuzi)<br />{<br /> let val = 0;<br /> for(let i = 0; i < sKanSuuzi.length; i++){<br /> const num = cKanSuuzi2Int(sKanSuuzi[i]);<br /> if(-1 === num){<br /> // 変換を打ち切って結果を返す<br /> return val;<br /> }<br /> val *= 10;<br /> val += num<br /> }<br /> return val;<br />}</span><br />```<br />変換の打ち切りのところは、アドオンの実装上で末尾に『年』の文字がついた文字列が渡されてくることがあるのをナアナアで処理しているものです。<br />今回の用途では不正な文字列が入ってくることはないのですが、汎用をにらむと漢数字以外が混ざっていたら不正と判定するように変えるべき箇所ではあります。<br /><br />後ろから処理していく方法でもよく、桁が最初から自明という利点もあるのですが、今回は頭から処理で実装しました。<br />こういうところの判断になんというべきか、今回のコードはJavaScriptで書いていますが全体的にCライクな空気があります。<br /><br /><br />### 桁あり漢数字文字列の変換<br />桁ありの場合、文字列の中に『数桁数...』と並んでいることになります。<br />前述のとおり数が1のときに『桁数桁』から数が省略されて『桁桁』になる場合もあります。<br /><br />今回の実装は以下のようにしました。<br />頭から処理して『数』であれば数値に変換して変数にしまう。<br />桁であればべき指数Nに変換してから、10のN乗で値に展開します。<br />(’千’の場合は桁であるNは3、10の3乗で1000が得られる) <br />変数から数をとりだしてかけ合わせれば、その桁の値ができあがるので、結果をしまう変数に足しこみます。<br />これを漢数字文字列の最後まで行い、すべての桁を足し合わせることで数値変換を実現しています。<br /><br />ここで主要なトリックは、数の変数を用意しておきあらかじめ1を入れておくことです。<br />桁桁と続いたときに、省略された1がそのまま存在するので、専用の分岐処理がいりません。<br />数の変数は、取り出して使ったら1に戻しておきます。<br /><br /><br />### 細則の、'20'を表す文字などについて<br />"参廿"で3*20=60、"廿十"で20*10=200とかやられる心配はしなくてよさそうなので、そのまま加算しています。<br /><br /><br />----<br />## おわり<br /><br />というわけで、以上のことを考慮し、複数の記法に対応しているという意味で、いくらか現実世界に対応できるであろう変換機能を書いた次第です。<br /><br />>『しかし輝く宝石の完璧さは、私たちがMozillaを書いたときの目的ではなかった』<br />「ストラテジーレターIV: ブロートウェアと80/20の神話(ジョエル・スポルスキ / 翻訳: 青木靖)」より<br /><br />というやつかなと思いながらコードを書いていました。まあこの程度の内容はまったく複雑とは言わないわけではありますが。<br /><br />今回、とりあえず不要として不正な文字列の検出を適当にしています。<br />年号を書き間違えているときにできることは大してないので、とりあえずいいだろうとしたのですが。<br />そのうち機会があればきちんとするかもしれません。</p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-47968575183627446342021-10-03T14:37:00.000+09:002021-10-03T14:37:31.987+09:00 漢数字文字列のもう一歩実用的な数値変換 - その1<p>ブラウザアドオンを開発した際に、漢数字の文字列から数値への変換を実装しました。<br />せっかくなので何をしたのか、必要な知識などをまとめた次第です。<br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-jYe4EzurTyQ/YVlBEz8rPqI/AAAAAAAAJK4/CNZa2OmkTaAdyh7gxmWelSplmw_t8WFgQCLcBGAsYHQ/20210910_example.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="458" data-original-width="976" height="150" src="https://lh3.googleusercontent.com/-jYe4EzurTyQ/YVlBEz8rPqI/AAAAAAAAJK4/CNZa2OmkTaAdyh7gxmWelSplmw_t8WFgQCLcBGAsYHQ/20210910_example.png" width="320" /></a></div><br /><br />この漢数字変換を使っているのは、 <a href="https://addons.mozilla.org/ja/firefox/addon/daisy-warekiconv/">daisy WarekiConv という和暦を西暦に変換表示してくれるブラウザアドオン</a>です。<p></p><p>(<a href="https://chrome.google.com/webstore/detail/daisy-warekiconv/ckcedomogohijbfmcdnoaoeeoonabnbd">Chromeにも対応</a>。)<br />昭和や皇紀といった和暦で表記された年号を、頭で計算しなくても西暦に自動計算して表示してくれます。<br />このとき、和暦は年が漢数字で表記されていることが多かったため、漢数字文字列の変換が必要になった次第です。</p><p></p><p><br />なおソースコードを<a href="https://github.com/MichinariNukazawa/wareki_conv_webextensions">githubのWarekiConvプロジェクトページ</a>にて公開しています。</p><p>(`kanNum.js`というファイルが漢数字変換なのですが、名前を変えるかもしれないので直リンクはしていません。)<br /><br /></p><h2 style="text-align: left;">## 前段の処理 / 文字列から漢数字列の抽出</h2><p>実際に変換を行うまえに、まず必要な前処理から。<br />現実では解説などの文字列のなかに対象が埋まっており、漢数字部分だけ綺麗に存在するわけではないので抽出が必要です。<br /><br />方法としてはあまりに単純、すべての漢数字文字を変数にあつめておき、これで作った正規表現でマッチをかけます。<br /><br />```<br />const rsRekiStrNum = `元年|\\d+年?|[${wideNumAllChars}]+年?`;<br />```<br /><br /></p><h2 style="text-align: left;">## 漢数字文字列のいくつかのパタン</h2><p><br />全角数字は<br />`1024`<br />くらいしかパタンがないのですが、漢数字はいくつかのパタンがあり、ちょっとした細則も持っています。<br /><br />漢数字の場合は、以下のパタンが考えられます。<br />`一〇二四`<br />`千二十四`<br />`壱阡弐拾四`<br />`壱阡廿四`<br /><br />大きなパタン分類として『桁の有無』、桁を書く場合と書かない場合があります。<br />-- 桁を書く場合、数がゼロの桁は桁の文字を省略する。<br />-- 桁を書かない場合、数がゼロの桁は`〇`。<br /><br />さらに、以下のようないくつかの細則があり、またバリエーションが生まれます。<br />- 桁の数字が`1`のとき、文字を省略する場合としない場合がある。<br />- 『漢数字』と『大字』2種類の文字がある。<br />(この説明では、記述により多くの場合は両方まとめて漢数字と呼びながら書いています。)<br />- 『漢数字』『大字』では、同じ数字を表す文字が1つではない場合がある。<br />- 桁と数が一緒になっている文字もある(例:'卄'が20を表すなど)。<br /><br />桁の数字が`1`のときというのは、たとえば1000の場合、<br />`千`<br />`壱阡`<br />のどちらでもかまわないということです。<br /><br />漢数字、大字はそれぞれ<br />'〇一二三四五六七八九'<br />'零壱弐参肆伍陸漆捌玖'<br />というやつです。<br /><br />同じ数字をあらわす文字として、たとえば以下はすべて『2』です。<br />'二弐弌貳貮弍'<br /><br />----</p><p><br />以上、本記事では数字をあらわす漢数字と大字の文字列について、あつかうための前処理とパタン、また変換のさいに考慮しなければならない細則について書きました。<br />その2では実際に文字列から数値へ変換をおこなっていきます。</p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-667176436776992582021-10-03T12:01:00.001+09:002021-10-03T12:01:27.690+09:00局地戦闘機『震電』ゼロベース制作(1/700スケール模型) - その2<p><a href="https://blog.michinari-nukazawa.com/2021/10/1700.html"> その1</a>ではフルスクラッチで最初の大まかなモデリングと、3Dプリンタでの出力までを行いました。</p><p>この記事ではその続き、スジボリなどによるディティール追加と、量産、ついでに色つけについて書く予定です。 <br /></p><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-0E0Xwc5We3g/YVkZei7KldI/AAAAAAAAJJE/EnGyuWzQjioSvpDMwHWZmUE9JLWuvfKXACLcBGAsYHQ/DSC01919.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-0E0Xwc5We3g/YVkZei7KldI/AAAAAAAAJJE/EnGyuWzQjioSvpDMwHWZmUE9JLWuvfKXACLcBGAsYHQ/DSC01919.JPG" width="320" /></a></div>
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B0017TFIPU&linkId=bf29d14645b2c0ff0dff52ee5baeb886&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B0017TCKY2&linkId=a672f93f540cc21c5d805083cb13317b&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B01N3AK9IQ&linkId=0ca3ca529cb14a4ae7d916d74fe2072d&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>
<br /><p></p><p></p><p><br />## スジボリなどによるディティール追加<br /><br />最初は脚部のために、画像の通り腹を上に向けて出力していたのですが、スジボリを入れはじめた時にスジボリが綺麗にでるよう腹ばいに変更しました。<br />そのままの向きでは、スジボリの交点に下端が発生するため主翼の平面上にランナーが生えて、きれいに切り取るのが大変になります。<br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-bs4z7PKr5EE/YVkZ0_37FgI/AAAAAAAAJJM/WLu0ZSVCb48809to3LQEUYY0Xqprd9KxQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B15-08-06.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-bs4z7PKr5EE/YVkZ0_37FgI/AAAAAAAAJJM/WLu0ZSVCb48809to3LQEUYY0Xqprd9KxQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B15-08-06.png" width="320" /></a></div><p><br /><br />下付きだと脚にランナーがはえますが、細長いパーツのため、ランナーを外す作業中に折れてしまいます。<br />実際作業中に何度か折ってしまい、そのつど強度不足ということで脚太さを修正しています。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-uX8qrCALw4c/YVkad79g_9I/AAAAAAAAJJg/PL5Rqzw2PHU-J1-I2weaBYuU5hhQq0InQCLcBGAsYHQ/DSC01995-2.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="857" data-original-width="1122" height="240" src="https://lh3.googleusercontent.com/-uX8qrCALw4c/YVkad79g_9I/AAAAAAAAJJg/PL5Rqzw2PHU-J1-I2weaBYuU5hhQq0InQCLcBGAsYHQ/DSC01995-2.JPG" width="314" /></a></div><br /><br /><p></p><p></p><p></p><p></p><p>特に震電は特徴的な後部脚が翼から生えており、<br />事前に見えづらい箇所に支持枝をデフォルメした補強を入れていたのですが、これもつど厚く大きく変更していきました。</p><p></p><p><a href="https://lh3.googleusercontent.com/-3D7phv4x9Cc/YVkaQKGDb8I/AAAAAAAAJJY/tmJfUzNpPAo6GcXtEyd9HLTfjq67bIrMQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-03%2B11-48-23.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-3D7phv4x9Cc/YVkaQKGDb8I/AAAAAAAAJJY/tmJfUzNpPAo6GcXtEyd9HLTfjq67bIrMQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-03%2B11-48-23.png" width="320" /></a></p><p style="text-align: left;">あわせて全体の形状も、当初の実機に近い形状から、どんどんデフォルメを強めています。<br /></p><div class="separator" style="clear: both; text-align: left;"> </div><div class="separator" style="clear: both; text-align: left;">前脚は直線的なのと、元から根本を太めにしていたためか、先端の細い部分も意外と折れませ</div><div class="separator" style="clear: both; text-align: left;">んでした。<br /></div><p>とはいえ丈夫であるにこしたことはないので、後脚を太くするたびにこちらも太くしていきます。<br />(前脚は後脚より細いという実機の関係が保たれていれば、外観としても太さを合わせたほうが見た目がよく思います。)<br /> </p><p>スジボリについて、1/700 ではこれくらいだと全然スジボリが出なくて、かなり強くデフォルメが必要です。<br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-I5j0Aap624k/YVkapvCLnyI/AAAAAAAAJJo/ZaI-D1Q4WLUxvPqGvibVZ_4MNR3RxnjwACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-27%2B22-23-41.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-I5j0Aap624k/YVkapvCLnyI/AAAAAAAAJJo/ZaI-D1Q4WLUxvPqGvibVZ_4MNR3RxnjwACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-27%2B22-23-41.png" width="320" /></a></div><br /><br />もちろん最初は実機スペックを踏襲してモデリングしていたわけなのですが、強度やら何やら対応していくうちにどんどんデフォルメされていきました。<br />最終的に全長と全幅しか元スペックが残っていないのでは。<br />どちらにしろ1/700スケールで実機ママというわけにはいきませんが。<br />強度の問題もありますが、ヒトがモノを見るときの仕組みとして、モデルが小さすぎるため実機どおりのままのほうが実機と違うものに見えてしまうものなので。<p></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-0ej6D81E2Mg/YVka7VtgfdI/AAAAAAAAJJ0/xpNXpy10GN4u1YmWt7Twdm3N6pACOHuiACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-03%2B11-51-56.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-0ej6D81E2Mg/YVka7VtgfdI/AAAAAAAAJJ0/xpNXpy10GN4u1YmWt7Twdm3N6pACOHuiACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-10-03%2B11-51-56.png" width="320" /></a></div><br /><br />銃口は、先頭部分にあいている銃口の穴も追加しました。このサイズではパット見では肉眼で確認できないのですが、よく見るとあるのがわかりますし、塗装してもいちおう潰れません。<br /><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-kRzBEbKmSQU/YVkbCYCSM_I/AAAAAAAAJJ4/hUt7EpRyqFsWhTG8Y4eGuLp3RA6Wxf-RQCLcBGAsYHQ/DSC02023-3.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1019" data-original-width="729" height="240" src="https://lh3.googleusercontent.com/-kRzBEbKmSQU/YVkbCYCSM_I/AAAAAAAAJJ4/hUt7EpRyqFsWhTG8Y4eGuLp3RA6Wxf-RQCLcBGAsYHQ/DSC02023-3.JPG" width="172" /></a></div><br /><br />垂直尾翼にもスジボリを入れてあります。<br />なお試作中に付けられていた尾翼の車輪はいずれなくなるとのことだったので、つけていません。<br /><br />プロペラについて、量産では4翅プロペラになる予定だったそうなのですが、見慣れているであろう6翅プロペラをデフォルトにしました。<br />4翅版はモデルのプロペラ部分を置き換えれば簡単に作れます。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-XOqsYl_KSJQ/YVkbJQS-2GI/AAAAAAAAJJ8/x-vIyvzfBlcgsYVld5c-0fpMrtuO1roiACLcBGAsYHQ/DSC02014.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-XOqsYl_KSJQ/YVkbJQS-2GI/AAAAAAAAJJ8/x-vIyvzfBlcgsYVld5c-0fpMrtuO1roiACLcBGAsYHQ/DSC02014.JPG" width="320" /></a></div><br /><br />露光時間を1.5secに伸ばしたので細かい溝は埋まってしまうかと心配していましたが、最終的には上手くいってよかったです。<br /><br /><br />## 量産<br />Blenderではなく、スライサソフト上で増やしました。<br />CHITUBOXでは、ランナーを生やした状態で、ボタンひとつで増やせるので便利でした。<br /><br />1つで出力して問題なく造形物が出てきていれば、特に悩むことはなく。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-nYlt_uI-EkE/YVkb50V1UGI/AAAAAAAAJKg/ci7_vj5fCBYZUkZT9fxhA_3jg8SHnv2mwCLcBGAsYHQ/DSC01888.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-nYlt_uI-EkE/YVkb50V1UGI/AAAAAAAAJKg/ci7_vj5fCBYZUkZT9fxhA_3jg8SHnv2mwCLcBGAsYHQ/DSC01888.JPG" width="320" /></a></div><br /><br /><br />## 色つけ<br />レジンが白色なので、サンプル画像的にも海軍機らしい色が欲しくて着色を行いました。<br /><br />『タミヤ エアーモデルスプレー No.21 AS-21 暗緑色2 (日本海軍) 』を数回にわけて吹付け。<br />細かい色分けは筆が必要だと思います。<br /><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><img alt="" data-original-height="0" data-original-width="0" height="240" src="" width="320" /></div><br /><br />海軍機は実際には灰色だという話もあるのですが、そうはいっても緑色のイメージは根深く、また震電は実験機で緑の機体しかないのでまあいいかなという判断です。<br /><p></p><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-vsmKs70N_a0/YVkbi4tYIvI/AAAAAAAAJKQ/b17Vc37pqyc2lPkU80JAgnWKDnKI6b7tgCLcBGAsYHQ/DSC01912.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-vsmKs70N_a0/YVkbi4tYIvI/AAAAAAAAJKQ/b17Vc37pqyc2lPkU80JAgnWKDnKI6b7tgCLcBGAsYHQ/DSC01912.JPG" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-_W5NKk_n_Q4/YVkbhHnGA-I/AAAAAAAAJKM/Cy7eS2rxbWkfbv2iZgi5RiWX0BTJwlSHACLcBGAsYHQ/DSC01910.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-_W5NKk_n_Q4/YVkbhHnGA-I/AAAAAAAAJKM/Cy7eS2rxbWkfbv2iZgi5RiWX0BTJwlSHACLcBGAsYHQ/DSC01910.JPG" width="320" /></a></div><br /><br />しかし艦上に並べるという。しかも戦艦の。水上機でもないのに。<br />ついでにいうと、震電はB29迎撃を意図した局地戦闘機かつ、プッシャ式のため滑走距離が長い(プロペラ風が翼に当たるのが重要らしい)とのこと。<br />緑のプッシャ機が甲板上に並んでいる絵はヘンテコの上にヘンテコというわけですが、あくまで実作例なので。<br /><br /><br />## おわりに<br />1/700震電モデリングの動機は以降のプロジェクトの前準備だったのですが、いろいろ楽しかったです。<br />また1/700では表現できることが限られるため、逆に作業工程がすっきりしていて、はじめての航空機模型の制作としては大変ありがたかったです。<br />(1/700 伊507フルスクラッチ デザインのときは、どこまでやろうか何ができるかと大変悩みました。)<br /><br />伊507をモデリング&出力したときはもっといろいろやったので(モデルにも震電よりいろいろBlender機能を使ったり)、そのうちまとめて公開できたらなと思っています。<br /><br />船舶模型メーカの艦載機、1/700なのにディティールすごい。<br />作ってあらためて、金型による成型の精度のすごさを思い知った感じです。<br />(主商品である船舶模型のディティールもこれくらい細かく...とか思ってしまいますが。)<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-D5LBYKF6ra8/YVkbrPVzBfI/AAAAAAAAJKU/bA8aJ5h2jBgxieAih3QNL_ne5xIl9hlsQCLcBGAsYHQ/IMG_20210930_104652.jpg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1536" data-original-width="2048" height="240" src="https://lh3.googleusercontent.com/-D5LBYKF6ra8/YVkbrPVzBfI/AAAAAAAAJKU/bA8aJ5h2jBgxieAih3QNL_ne5xIl9hlsQCLcBGAsYHQ/IMG_20210930_104652.jpg" width="320" /></a></div><p><br /><br />3Dプリンタの解像度の限界を思い知りました。といってもこちらは設定の追い込みとかすれば違うのかもしれません。</p><p> </p><p></p><p>とはいえ思っていたよりもずっとよいものが出来たので、pixiv/BOOTHで「<a href="https://daisy-bell.booth.pm/items/3310514">震電 局地戦闘機 1/700 モデル</a>」出力した模型を販売することにしました。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Rp3O3z6KL1I/YVkc4RJrZEI/AAAAAAAAJKw/a0V-mK_CA1IeQJne_HElhC8rkOqVJlTNACLcBGAsYHQ/DSC01895.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1616" data-original-width="1080" height="240" src="https://lh3.googleusercontent.com/-Rp3O3z6KL1I/YVkc4RJrZEI/AAAAAAAAJKw/a0V-mK_CA1IeQJne_HElhC8rkOqVJlTNACLcBGAsYHQ/DSC01895.JPG" width="160" /></a></div><br /><br />さて今後の予定について。<br />「震電」の1/144スケールモデル作成、また同じ1/144で「イリス漁業連合 汎用護衛戦闘機『桃音』(設定検証モデル)」を作ろうと考えています。<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-X214GQwZils/YVkb1T7yy6I/AAAAAAAAJKc/fn12nePL8uAMxU2vQZqUvN8Sj338dKVagCLcBGAsYHQ/DSC01888.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-X214GQwZils/YVkb1T7yy6I/AAAAAAAAJKc/fn12nePL8uAMxU2vQZqUvN8Sj338dKVagCLcBGAsYHQ/DSC01888.JPG" width="320" /></a></div><br /> <br /><p></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08RYSNFVD&linkId=d0fe00bfe397d871142a6029f503f070&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08RYSNFVD&linkId=d0fe00bfe397d871142a6029f503f070&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-69034715971074513472021-10-02T16:04:00.001+09:002021-10-03T12:02:09.423+09:00局地戦闘機『震電』ゼロベース制作(1/700スケール模型) - その1<p> 局地戦闘機『震電』の1/700スケール模型を作成した際の作業記録です。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-v3pUdq0Iqg4/YVgDrWwUiiI/AAAAAAAAJHs/3DPymI8LYiQ06k6tDVgl9iWrm1HRvIVNACLcBGAsYHQ/DSC01851.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-v3pUdq0Iqg4/YVgDrWwUiiI/AAAAAAAAJHs/3DPymI8LYiQ06k6tDVgl9iWrm1HRvIVNACLcBGAsYHQ/DSC01851.JPG" width="320" /></a></div><br /><br /><p></p><p>無料の3Dモデリング ソフトであるBlenderでデジタル制作して、3Dプリンタで出力しています。<br /><br />(3Dプリンタで作ってみた系のブログ記事はけっこうありますが、<br />観測範囲では内容はほとんどがプリンタの精度の話などで、ノウハウについても出力失敗時の硬化時間の工夫くらいで、<br />出力するためのモデルの作り方とか、実際に作っているときのトライアンドエラーの話はあまりされていないような気がしていたので、<br />そういう内容をいくらか含んでいます。)<br /><br />『震電』は第二次世界大戦時に大日本帝国海軍により試作された局地戦闘機で、<br />前翼型(エンテ型)・推進式(プッシャー式)の、めずらしい形をした高速戦闘機となっています。<br /><br />試作のみで終戦を迎え、実戦では使用されていません。<br /><br />今回はこの『震電』を、艦船模型など組み合わせやすい 1/700 スケールで作成しました。<br /><br />似たようなものには、艦船模型と合わせるための 1/700スケール 戦闘機の、<br />- ピットロード 1/700 スカイウェーブシリーズ 世界の現用戦闘機セット <br />(F-15C, F-15J, タイフーン等)<br />- 静岡模型教材協同組合 1/700 ウォーターライン 日本艦載機 前期型<br />(零戦21型、99艦爆、97艦攻、彗星)<br />などが模型メーカから出ています。<br /><br />主な仕様:<br />- 艦船模型と合わせやすい1/700スケール<br />- 艦船模型と合わせるので脚ありの接地モデルとする<br />- プロペラあり<br />- 船体外板のラインを入れて、ある程度ディティールをもたせる<br />- 3Dプリンタ出力と、塗装などの加工作業、移動や輸送を気軽にできる丈夫さ<br />- 扱いやすく手間のかからない一体型<br />(注意:足が折れやすいと思われるので対処が必要)<br /><br />資料:<br />「異端の空」(文春文庫/渡辺洋二)<br />「幻の戦闘機」(光文社NF文庫/碇義郎)<br />参考:<br />wikipediaの震電のページ<br /><a href="https://仮想艦隊.jp/cms/blog5.php?itemid=139">https://仮想艦隊.jp/cms/blog5.php?itemid=139</a> の「震電オリジナルの図面」<br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-T11F77Qmij4/YVgDApJI9vI/AAAAAAAAJHA/N7fzWs2mj0UBlRmAWDnBlDYxnt6lcPVxACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B15-08-01.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-T11F77Qmij4/YVgDApJI9vI/AAAAAAAAJHA/N7fzWs2mj0UBlRmAWDnBlDYxnt6lcPVxACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B15-08-01.png" width="320" /></a></div><br /><br /><br />スケール算出:<br />制作の前にサイズ感を得ておく。<br />同規模の競合である零式などはおおむね1円玉の上に乗るサイズであることが作例などからわかっています。<br /><br />全幅11m の 1/700 = 1.571cm<br /><br />また震電の実機サイズはあらかじめわかっています。<br />そこで制作は簡単のため原寸(1/10^nスケール)で行い、出力の段階で1/700スケールに変換することとしました。<br /><br />変換の際にかける係数:(1/700)*100 = 0.1428571% 142.85<br /><br /><br />モデリング<br />まずはサイズのわかっている機体と翼を仮置きします。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-1rQoHVcIuJ8/YVgDL8Oa2JI/AAAAAAAAJHI/lB-7ehdKa58ectyUH_t83q54plLG48mhACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-23%2B07-17-43.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-1rQoHVcIuJ8/YVgDL8Oa2JI/AAAAAAAAJHI/lB-7ehdKa58ectyUH_t83q54plLG48mhACLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-23%2B07-17-43.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-i1HgoKLtzxc/YVgDLXUHKNI/AAAAAAAAJHE/4BLqeF1eBOsplfW7S4F_Voz065R28TUWQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-23%2B07-10-35.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-i1HgoKLtzxc/YVgDLXUHKNI/AAAAAAAAJHE/4BLqeF1eBOsplfW7S4F_Voz065R28TUWQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-23%2B07-10-35.png" width="320" /></a></div><br /><br /><p></p><p></p><p><br />震電の翼は翼端20度取り付け15度になっていましたので、翼をそのように作成。<br />とはいえ模型として作るぶんには外観が合っていれば取り付け角はどうでもよいため、このあとの作業での微調整では取り付け角はいいかげんに扱っています。<br /><br />給気口、操縦席、各翼を追加していきます。<br />操縦席は悩みましたが、1/700スケールの必要ディティールと出力可能精度から、一体の塊としました。<br /><br />ざっくりと足を追加。<br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-J4GhYKqIBrc/YVgDQaHmsLI/AAAAAAAAJHM/9_frJd_aAig0Ss0HaYvhcrtZuXrtmxwKwCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B14-49-18.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-J4GhYKqIBrc/YVgDQaHmsLI/AAAAAAAAJHM/9_frJd_aAig0Ss0HaYvhcrtZuXrtmxwKwCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B14-49-18.png" width="320" /></a></div><br /><br />ひととおりパーツが揃ったので、ここで出力できるか検証するため最初の3Dプリントをかけます。<br /><br />今回、3Dプリント出力に使ったのは以下:<br />3Dプリンタ:Photon Mono SE<br />スライサAPP:CHITUBOX(for Linux 1.9.0)<br />レジン:エキマテ(低アレルゲン水洗いレジン)<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08RYSNFVD&linkId=d0fe00bfe397d871142a6029f503f070&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<br />スライサAPPで、モデルデータを3Dプリンタの出力データに変換します(スライシング)。<br /><br />前述のとおり、スケール変更はこのスライシングのタイミングで行います。<br /><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-OXXp6Q2D04Y/YVgDZ67kNHI/AAAAAAAAJHU/-QnZ7dnUJRMPVCB7BsiSOE_MeYyoXfdYQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-27%2B20-11-48.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-OXXp6Q2D04Y/YVgDZ67kNHI/AAAAAAAAJHU/-QnZ7dnUJRMPVCB7BsiSOE_MeYyoXfdYQCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-27%2B20-11-48.png" width="320" /></a></div><br /><br />スライシング作業で難しいのは、パーツ分割・出力角度の決定・自動ランナーの調整です。<br /><br />スライシングの際、出力物の角度を調整します。<br />この角度の決定が難しく、(ここは細かい話をするのが大変なのでざっくり書きますが)<br />- 層出力中に宙に浮かない角度を見つける<br />- かつ、積層に対して45度以上の垂直な面をめざし、できるだけ水平に近い面を減らす。<br />- 自動ランナーが良い位置にランナーを生やしてくれる角度を探す。<br />などがあります。<br /><br />3Dプリントでは浮いているものはランナーを生やしてつなげる必要がありますが、パーツ位置によりランナーをつけたくない箇所もあったりします。<br />浮かない角度をつけることが不可能ならパーツ分割です。<br />水平の面を減らすことについて、ほとんどの出力物は45度角ほどある部分があるため、あちらを立てればこちらが立たず(物理的に角度が寝る)のを、良いようにとりなす角度をを見つけなければなりません。<br />スライシングソフトの自動ランナーは不完全なので、手作業で補完しなければなりません。<br />必要な箇所にランナーがつかなかったり、不要な箇所・切り取りづらい箇所にランナーがついたりします。<br />モデルのサイズが大きかったり形状が複雑だと、手作業でランナーを調整するのも限界があります。<br /><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-kGe9mGVcNNs/YVgDdG4JcbI/AAAAAAAAJHc/gh-oabj8mGsBySrT_Bd4hE2L8NzDjPiagCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B17-22-18.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1168" data-original-width="2048" height="183" src="https://lh3.googleusercontent.com/-kGe9mGVcNNs/YVgDdG4JcbI/AAAAAAAAJHc/gh-oabj8mGsBySrT_Bd4hE2L8NzDjPiagCLcBGAsYHQ/Screenshot%2Bfrom%2B2021-09-26%2B17-22-18.png" width="320" /></a></div><br /><br />実作業では、出してみてダメだったらアレコレ調整、を何度か繰り返すことになります。<br />出力角度の調整も、そのうちのひとつです。<br /><br />以前、伊507やイリスヨナを作ったときは、ツルツルの断面に自動ランナーが上手くつかないため、ランナー接着用の突起をわざわざモデルの断面部に追加したりしました。<br />また、パーツ分割でもいろいろ苦労したので、一体型の震電はそこについては楽です。<br />(大きいものはプリントサイズに納めるために分割が必要。<br />複雑な形状のものは層で出力しようとすると支えるためのランナーを付けられず空中に浮いてしまうため、やはり分割が必要になってしまう。)<br />(できれば中空構造にすることでレジンを節約したい、というストレッチングゴールもある。)<br /><br />ランナー接触面の設定、という悩みどころもあります。<br />これは小さいほど出力物をランナーから切り離すのが楽なのですが(プチプチと楽しい音で手でちぎれる)、支えが小さいということは印刷中に出力物が木になったりんごのように落ちて失われる可能性が増えます。<p></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-uaf7a7G7aUM/YVgDgCIhofI/AAAAAAAAJHg/u-FTebePKg837ayW_HdzPCC-u_gUwUNXQCLcBGAsYHQ/DSC01844.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-uaf7a7G7aUM/YVgDgCIhofI/AAAAAAAAJHg/u-FTebePKg837ayW_HdzPCC-u_gUwUNXQCLcBGAsYHQ/DSC01844.JPG" width="320" /></a></div><br /><br />初期の出力結果は、プロペラ部分と後足がきちんと出力されませんでした。<br />どうやら細すぎて印刷中に千切れてしまったようです。<br />また、プロペラが千切れたことでボディの支えも失われて、機体後部が出力されないことが繰り返されました。<br /><br />都度プロペラを太く修正しつつ、支えも太くなるよう設定を調整していき、だんだんと出力結果が良くなっていきます。<br />しかしプロペラ〜機体後部まわりがどうにも安定せず、苦労しました。<br /><br />最終的に、UV照射時間を1sec->1.5secへ伸ばして硬度を上げることで、出力に成功しました。<br />(Photon Mono SEは基本的に、1層あたり照射時間1secで出力可能。)<br />小さいモデルの出力には照射時間を伸ばすのが有効のようです。<br />なお、出力時間は伸びますが、40min->50min程度でした。印刷中には台座の移動時間などもあるため、単純に1.5倍にはなりません。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-7GshgpuDh2w/YVgDkbnxevI/AAAAAAAAJHo/WABwcZDlaakvf7Nt5RPwMef2qCk4oS-dgCLcBGAsYHQ/DSC01851.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1616" height="214" src="https://lh3.googleusercontent.com/-7GshgpuDh2w/YVgDkbnxevI/AAAAAAAAJHo/WABwcZDlaakvf7Nt5RPwMef2qCk4oS-dgCLcBGAsYHQ/DSC01851.JPG" width="320" /></a></div><br /><br /><br /><a href="https://blog.michinari-nukazawa.com/2021/10/1700_3.html">続きの記事では切り込みラインによるディティール追加と、量産、ついでに色つけについて</a>書く予定です。<p></p><p> </p><p> </p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B0017TFIPU&linkId=bf29d14645b2c0ff0dff52ee5baeb886&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B0017TCKY2&linkId=a672f93f540cc21c5d805083cb13317b&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B01N3AK9IQ&linkId=0ca3ca529cb14a4ae7d916d74fe2072d&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-77376098290832180992021-03-20T21:47:00.004+09:002021-03-20T21:47:47.198+09:00electron12 でdialogを呼び出す(ContextBridge)<p>electron12対応へ、前回は <br /></p><p><a href="https://blog.michinari-nukazawa.com/2021/03/contextmenumain-processelectron-12.html">右クリックメニュー(ContextMenu)カスタム処理をmain-processへ移動した(electron 12対応) </a><br /></p><p> まで。</p><p> nodeIntegrationはともかくmoduleは将来廃止になるとのこと。</p><p>npmパッケージで逃げることもできるが、まとめて移行することに。</p><p>つまりいろいろなものをrender-processからmain-processへ移動することになり、ContextBridgeの導入を避けることができない。 <br /></p><p> </p><h3 style="text-align: left;"> # electron11まで使えたdialog呼び出しコード<br /></h3><p>これまではrender-process側の適当なjsファイル内で完結する下記2行程度の記述で ダイアログを表示することができたのだが、ようはこれが使えなくなる。<br /></p><p> ``` js/mypage.js<br /></p><p>const {dialog} = require("electron").remote; <br /></p><p>dialog.showMessageBoxSync(null) <br /></p><p>``` <br /></p><p> </p><h3 style="text-align: left;"># contextIsolationを有効化</h3><p> エラーメッセージによると、ContextBridgeを使うには、contextIsolationを有効化しなければならない</p><p>(electron12からデフォルトでtrue)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-CWUHWjjCx6I/YFWqK95TB_I/AAAAAAAAHtY/hodgq3Wn8SEk3H0ezywV1sNyoHgqQ0TRwCLcBGAsYHQ/s1640/Screenshot%2Bfrom%2B2021-03-20%2B11-46-24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1310" data-original-width="1640" src="https://1.bp.blogspot.com/-CWUHWjjCx6I/YFWqK95TB_I/AAAAAAAAHtY/hodgq3Wn8SEk3H0ezywV1sNyoHgqQ0TRwCLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2021-03-20%2B11-46-24.png" width="320" /></a></div><p></p><h3 style="text-align: left;"># ページ上のjsでdialogは呼べない(renderer-process)</h3><p>ContextBridgeでmain-processへ飛ばしてそこからrequest('electron').dialogを呼ばなければならない。<br /></p><p>```<br /></p><p>MN@daisy-bell:lina_dicto/$ git diff lina_dicto/js/index.js }catch(err){<br />- message_dialog('error', 'user preference error', "user preference load error:\n" + err.message);<br />+ window.myApi.message_dialog('error', 'user preference error', "user preference load error:\n" + err.message);<br /> }<br /> <br /> }, false)<br />```<br /></p><p><br /></p><p> </p><h3 style="text-align: left;"># preload.js内でdialogは呼べない</h3><p>最初はpreload.js内でdialogを呼ぼうとしたのだが、なぜかrequire('electron')からcontextBridge, ipcRendererのようにdialogを取り出すことができない。</p><p>(preload.js内でcontextBridge, ipcRenderer以外が使えないということかもしれない。</p><p>後のContextBridgeのサンプルコードなども、見る限りpreload.js自体はrender-process側ということのように見えるし。)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-aqzAkXOPIaQ/YFWqwmbglQI/AAAAAAAAHtg/KvPPYQQCid8RmiKpahEEp91TgSWhh79EgCLcBGAsYHQ/s1640/Screenshot%2Bfrom%2B2021-03-20%2B16-55-38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1310" data-original-width="1640" src="https://1.bp.blogspot.com/-aqzAkXOPIaQ/YFWqwmbglQI/AAAAAAAAHtg/KvPPYQQCid8RmiKpahEEp91TgSWhh79EgCLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2021-03-20%2B16-55-38.png" width="320" /></a></div> <p></p><h3 style="text-align: left;"># ContextBridgeでdialogを呼び出す</h3><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-QrdHAtFxRfI/YFXtFn31-8I/AAAAAAAAHuE/tUST8YN9SHcHhIJ0LhVdbsBPIeDAt2DJACLcBGAsYHQ/s1980/Screenshot%2Bfrom%2B2021-03-20%2B21-37-49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1496" data-original-width="1980" src="https://1.bp.blogspot.com/-QrdHAtFxRfI/YFXtFn31-8I/AAAAAAAAHuE/tUST8YN9SHcHhIJ0LhVdbsBPIeDAt2DJACLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2021-03-20%2B21-37-49.png" width="320" /></a></div><br /> <p></p><p>諸々の非同期を経由で呼び出しているが、 dialog.showMessageBoxSync()はウィンドウを渡せばウィンドウはモーダルに動作する(意図どおりブロックする)ように見える。</p><p>(まあとりあえずエラー通知にしか使ってないのでそこはどちらでもよしとする。 )</p><p>ページ上のjs -> preload.js上のcontextBridge -> main-processのjs と飛ばす。<br /></p><p><br /></p><p> ``` js/index.js (renderer-process)<br /></p><p> window.myApi.message_dialog('error', 'HELLO', 'hello!');</p><p> ```</p><p>```preload.js</p><p> const { contextBridge, ipcRenderer, } = require("electron");<br />contextBridge.exposeInMainWorld(<br /> "myApi", {</p><p> message_dialog: (strtype, strtitle, strmessage) => {</p><p> ipcRenderer.invoke('tomain-message-dialog', strtype, strtitle, strmessage);</p><p>``` <br /></p><p>``` index.js(main-process)</p><p>const { ipcMain } = require('electron');<br />ipcMain.handle('tomain-message-dialog', async (event, strtype, strtitle, strmessage) => {<br /> const { dialog } = require('electron');<br /> dialog.showMessageBoxSync(</p><p><span> </span><span> </span><span> // </span>win, // ここmain-processで生成したwindowを指定できる<br /> {<br /> type: strtype,<br /> buttons: ['OK'],<br /> title: strtitle,<br /> message: strmessage,<br /> });<br />});<br />``` <br /></p><p> <br /></p><p>TODO: 確認ダイアログを出してOK,NGを同期で返す。</p><p>(現行の互換動作。あるいはこれは諦めてもいい。今は不要なので) <br /></p><p>TODO: ファイル読み出し結果を戻す</p><p> TODO: ところでcontextIsolationが有効な時に nodeIntegration: trueが 無効になってない?</p><p> </p><p> <br /></p>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-26667664764507068612021-03-20T11:32:00.000+09:002021-03-20T11:32:09.907+09:00右クリックメニュー(ContextMenu)カスタム処理をmain-processへ移動した(electron 12対応)<p></p><p>右クリックメニュー(ContextMenu)カスタム処理をmain-processへ移動した。</p><p>electron 12へ移行するための対応の一部。</p><p>(移行作業としてはelectron11で移行作業をしてから12にアップデートするつもり)。<br /></p><p><br /></p><p>``` エラーメッセージ<br /></p><p> Uncaught ReferenceError: Menu is not defined<br />``` <br /></p><br /><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-JmQk5WgnI5A/YFVbRgPz_3I/AAAAAAAAHs0/XTDtDvEzyk02ANT5Mr3nNx8RHZs4s_iyQCLcBGAsYHQ/s2048/Screenshot%2Bfrom%2B2021-03-20%2B10-27-52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1417" data-original-width="2048" src="https://1.bp.blogspot.com/-JmQk5WgnI5A/YFVbRgPz_3I/AAAAAAAAHs0/XTDtDvEzyk02ANT5Mr3nNx8RHZs4s_iyQCLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2021-03-20%2B10-27-52.png" width="320" /></a></div><br /><p></p><br /><p> </p><p>Menuはmein-processでいじるものになっていた模様。</p><p><a href="https://blog.michinari-nukazawa.com/2021/03/applicationmenumain-processelectron-12.html">ApplicationMenuカスタム処理をmain-processへ移動した(electron 12対応) </a><br /></p><p>を参照 。<br /></p><p> </p>main-processのindex.jsの先頭付近に移動した。<br /><p>```</p><p> 7 require(path.join(__dirname, 'main-process/application-menu.js'))¬<br /> 8 require(path.join(__dirname, 'main-process/context-menu.js'))</p><p>```</p><p> electron-api-demosでは` Menu.setApplicationMenu()`はコールバックに仕込んでいたが、コンテキストメニューではしていないので、踏襲してそのまま呼び出しで済ませることにした。</p><p>```</p><p> 10 const {Menu, MenuItem, app, ipcMain} = require('electron')¬<br /> 11 let menu = new Menu();¬<br /> 12 ¬<br /> 13 menu.append(new MenuItem({¬<br /> 14 >-------label: 'Copy',¬<br /> 15 >-------accelerator: 'CmdOrCtrl+C',¬<br /> 16 >-------role: 'copy'¬<br /> 17 }));¬ <br /></p><p> ```<br /></p><p></p><p></p><p></p><p></p><p> </p><p>またコンテキストメニュー表示のコールバックも、 renderer-processでしていたのをelectron-api-demosの通りにmain-processへ移した。</p><p>rendererとmain-processでイベント が違う。<br /></p><p>Before:</p><p>``` (renderer-process)</p><p> 11 >------->-------window.addEventListener('contextmenu', function (e) {¬<br /> 12 >------->------->-------e.preventDefault();¬<br /> 13 >------->------->-------menu.popup(remote.getCurrentWindow());¬<br /> 14 >------->-------}, false);¬<br /></p><p>``` <br /></p><p>After: 'main-process/application-menu.js'(main-process)<br /> ```</p><p>app.on('browser-window-created', (event, win) => {<br /> win.webContents.on('context-menu', (e, params) => {<br /> menu.popup(win, params.x, params.y)<br /> })<br />})<br /><br />ipcMain.on('show-context-menu', (event) => {<br /> const win = BrowserWindow.fromWebContents(event.sender)<br /> menu.popup(win)<br />}) <br /></p><p>``` <br /></p><p> </p><p> </p><p> </p><p>ApplicationMenuのときと同じく、Rendererに持たせたmoduleを呼び出す機能は動作しない。 <br /></p><p> </p><p>そちらは後でpreload.js, ipcRendererなどを使う方式へ移行する。</p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-87150977841265789382021-03-20T11:15:00.003+09:002021-03-20T11:15:56.294+09:00ApplicationMenuカスタム処理をmain-processへ移動した(electron 12対応)<p>ApplicationMenu(画面上部のメニューバー)カスタム処理をmain-processへ移動した。</p><p>electron 12へ移行するための対応の一部。</p><p>(移行作業としてはelectron11で移行作業をしてから12にアップデートするつもり)。<br /></p><p><br /></p><p>``` エラーメッセージ<br /></p><p> Uncaught ReferenceError: require is not defined<br /> at menu.js:3</p><p>``` <br /></p><p>```menu.js:3</p><p>const remote = require('electron').remote; <br /></p><p>```</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-wMX19vKy8YU/YFTMqmdjipI/AAAAAAAAHsU/c4vdkKSJdIc6Y5DCPA6mfyYFRfch8uEKQCLcBGAsYHQ/s1640/Screenshot%2Bfrom%2B2021-03-20%2B01-05-35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1310" data-original-width="1640" src="https://1.bp.blogspot.com/-wMX19vKy8YU/YFTMqmdjipI/AAAAAAAAHsU/c4vdkKSJdIc6Y5DCPA6mfyYFRfch8uEKQCLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2021-03-20%2B01-05-35.png" width="320" /></a></div><br /><p></p><p> </p><p>だが根本的にはMenuはmein-processでいじるものになっていた模様。</p><p>electron-api-demos ではそうしている。</p><p>```electron-api-demos main.js</p><p>function loadDemos () {<br /> const files = glob.sync(path.join(__dirname, 'main-process/**/*.js'))<br /> files.forEach((file) => { require(file) })<br />} <br /></p><p>``` </p><p>ただしこの時点でelectron-api-demosはelectron9を使っていた。</p><p>(いろいろ言いたいことはあるが略) <br /></p><p><br /></p><p>Before:</p><p>``` index.html</p><p><script type="text/javascript" src="./js/menu.js"></script> <br /></p><p>```</p><p>After:<br /></p><p>```</p><p> require(path.join(__dirname, 'js/menu.js'))</p><p>```</p><p>これだけでもMenuカスタムが動作するようになってしまう。</p><p>ようは` Menu.setApplicationMenu()`を呼んでしまえばOKのようだが、electron-api-demosではコールバックに仕込むことをオススメしている模様。</p><p>```</p><p>app.on('ready', () => {<br /> const menu = Menu.buildFromTemplate(template) // テンプレートを変数に格納<br /> Menu.setApplicationMenu(menu)<br />}) <br /></p><p>```<br /></p><p><br /></p><p>これをすることで、Menuカスタムは動作するし、Quit(App.quit()呼び出し)などは動作するが、Rendererに持たせたmoduleを呼び出す機能は動作しない。</p><p> </p><p>そちらは後でpreload.js, ipcRendererなどを使う方式へ移行するとして、とりあえず次は右クリックのContextMenu。<br /></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-29472175649147960172020-12-30T15:44:00.000+09:002021-10-23T19:27:32.179+09:00食洗機の分岐水栓をDIY工事はあきらめてお願いした(結果的によかった)<p> 食洗機の『プチ食洗(NP-TCR3)』を購入しました。<br />食洗機にはビルトイン・据え置き水栓・据え置きタンク式、がありますが、購入したのは水栓をつなげる必要がある機種です。<br />わたしが購入前に参考にしたブログでは『買って取り付ければ終了だよ』で、『分岐水栓を取り付ける必要があるけれど自分でできるし簡単だよ』という感じでした。<br />おおむねそのとおりではあるものの、わたしの場合はイロイロあって業者さんに頼むことにし、結果的に頼んでよかった、と思ったのでその話を。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Pov3xOyrx_E/X-whnd3uzxI/AAAAAAAAG6g/h6ou3ofqd4E42wIau4RpG26IGXvoxeHtQCLcBGAsYHQ/s2048/IMG_20201230_124508.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" src="https://1.bp.blogspot.com/-Pov3xOyrx_E/X-whnd3uzxI/AAAAAAAAG6g/h6ou3ofqd4E42wIau4RpG26IGXvoxeHtQCLcBGAsYHQ/s320/IMG_20201230_124508.jpg" width="320" /></a></div><br /><p><br /></p><p></p><p></p><p><br />ちなみに、のちに出てくる蛇口と分岐水栓は以下。<br />蛇口 takagi JA200LN-NNDK01<br />分岐水栓 JH9024<br /></p><p></p><p><br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08K72PGPM&linkId=52250a1444b516657cf7ae21a93d6f43&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<br />
# 設置前の準備<br />設置場所が必要なのもそうですが、ちょこちょこと以下のような必要なものが出てきます。<br /><br />「分岐水栓」以外は、近所のスーパーやドラッグストアで当たり前に売っているようなものばかりなので、本体を買ってからつどつど集めるとかでも十分だと思います。<br />以前、3Dプリンタを買ったときは、必要な周辺小物の多さに驚き苦労しました。<br />それからすれば本当に少なく、3Dプリンタのように通販でしか手に入らないような専用品もほぼありません。<br />とはいえあらかじめ買っておいたほうが、設置と動作確認がスムーズです。<br /><br />必要なもの<br />- 分岐水栓<br />- 食洗機専用洗剤<br /><br />場合によって必要<br />- 電源延長コード<br />買った食洗機の電源コードは1mくらいでした。<br />食洗機の設置場所はおおむね水道の横、炊飯器等の家電から離れているため、我が家の場合は必要でした。<br /><br />本体を中古で購入する場合、<br />- 給水ホース<br />- 排水ホース<br />がついてくるかどうか確認しておくといいです。<br />なければ家電量販店で買えるようです。<br /><br /><br /># なぜ水場工事業者さんに頼まなければならなかったか<br />『DIYでやってみて、だめだったら業者にお願いしよう』というのもアリだと思います。<br />(それで水道を壊したりしたら余計に出費がかさむことにはなりますが。)<br />というか私のばあい、その方針でやってみて、工事をする前に降参した流れになります。<br /><br />## 1. 分岐水栓のとりつけには専用の工具が必要<br />購入前に参考にした、同じ蛇口と分岐水栓のブログ記事などでは、言及がなくて驚きました。<br /><br />分岐水栓の取扱説明書を見ると、分岐水栓のとりつけには『「トルクレンチ」が必要』とあります。<br />このトルクレンチが厄介で、必要なのは「水道工事用の10Nのトルクレンチ」であるのに対し、市販されているのは車用の「40N以上のトルクレンチ」ばかりです。<br />水道工事用の10N前後のトルクレンチは、ホームセンタではとりあつかいがありません。<br />Webで見てみると、どうやら6000円スタートの業務用キットには含まれているようですが、あきらかに業務用で、Web上で軽く調べるだけでは、詳細情報を知ることができません。<br /><br />どうやら、購入前に参考にしたブログ記事などの方々は適当に締めているようです。<br />家庭で特殊めな10Nのトルクレンチを持っていたのかもしれませんが。<br />また後に書く工事の様子を見た限り、それでも多くの場合はうまく行くのかもしれません。<br />専用工具で適切な強さで締める必要があるナットを、素人の自分がやって、水が飛び散って止まらないなどとなったら目もあてられないので、業者にお願いする判断をしました。<br /><br />## 2. 蛇口や水道管が悪くなっていた場合に対処できない<br />分岐水栓を設置する水まわり工事をお願いするにあたって、ネットなどで水道工事は悪い業者に引っかかると見積もり以上のすごい額を請求される、という話をどこかで読んだことがあったので、事前にいろいろ確認しました。<br />その、電話口での概算見積もりの段階で「見積もりから大きく外れる事情にはどんな場合がありますか」と訊いてみたところ、「水道の蛇口が経年劣化でダメになっていて、蛇口の交換等が必要になってしまう場合があります」との回答をいただきました。<br /><br />確かにDIYでそうなったら、蛇口の交換になって(まあそれもがんばればDIYできる範囲ではありますが)手に負えないだろうなと思いました。<br />(がんばれる人もいると思いますが、わたしはやめておきたい)<br /><br />## 3. 蛇口が固着して素人工事が難しい場合がある(私の場合)<br />実際に工事をお願いして、作業者の方がとりつけ工事をしているのを間近で見学させてもらいました。<br /><br />そのときに起こったことなのですが、蛇口の「化粧リング」が固着して外れませんでした。<br />この化粧リングは、ナットやパッキンのように固く締めて水漏れを防ぐような部品ではなくて、ネジ溝はあるけれど固定用で「かぶせてあるカバー」程度のものです。<br />しかし(それゆえなのか)、水道のカルキで固まってしまっていました。<br />わりと強めに蛇口を揺すったりしてみたものの、通常のレンチでは、化粧リングが外れず。<br />最終的に「蛇口に傷がついてしまいますが良いですか?」という確認のあと、見たことのないゴツめのレンチで無理やりねじ開けてもらいました。<br />(借家なので退出料に上乗せになるかもしれません。言われないと気づかない程度の跡なので大丈夫だろうだとは思っていますが。)<br /><br />なお固着していたのは半分内側みたいな位置の部品だったため、日頃の掃除の有無は、固着の発生にあまり関係ないと思います。<br />住んでいるのは、わたしが入居した時点で築3年程度、住み始めてから2年程度なので、蛇口は設置してから長くて5年くらいのはずでした。<br /><br /><br /># 工事をお願いする際の注意<br /><br />- 予備の部品とかを持ってきていないかも<br />これは、かなり推測混じりですが。<br />分岐水栓の付属品はあらかじめ確認しておいたほうがよいです。<br />工事中に『パッキンがないかも』という話が出て、そのときにけっこう真剣に探して、すぐに手持ちがあるような話にはなりませんでした。<br />こちらは確認したわけでないですし、汎用の水栓などは持ってきているのだと思います。<br />しかし分岐水栓は種類も多いので、部品の代替えがある期待はしないほうがよいかもです。<br /><br />- 分岐水栓はあらかじめ買っておいて大丈夫<br />というか、分岐水栓に種類がたくさんあるのもあって、あらかじめ買っておかないと在庫や手持ちにない場合があるのかもしれません。<br />私の場合、上記のとおりあらかじめ買った状態で工事のお願いをしたので、そのへん持ち込みしてもらって別途購入できるのか等は、確認していません。<br /><br />- 分岐水栓の取扱説明書をなくさない(工事経験のない機種かも)<br />自宅の蛇口はメーカがtakagiだったので、それなりにメジャな蛇口なのではと思っていたのですが、そうでもなかったようです。<br />作業者の方は、分岐水栓についてきた取扱説明書を見ながら作業、という感じになっていました。<br />分岐水栓の取扱説明書のほうに蛇口側のことについてはそれなりに書いてあったので蛇口の取扱説明書は不要でした。<br />(でもあるなら用意しておいたほうが良いと思います。)</p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B000WLKFCK&linkId=40e33a4d5ae960f27aa1e59ee1fecec7&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B01MYANHMF&linkId=aa74cd141d1fc40ab8e9399e0424ff83&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B088ZCBMW7&linkId=b92bd4a446952a1efbac1e05de751038&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com4tag:blogger.com,1999:blog-5478526694670659925.post-71911543462525935702020-11-09T23:42:00.007+09:002020-11-09T23:46:03.434+09:00WiFiルータ買い替えで、通信環境が改善(Archer AX20 WiFiルータ買い替えで、WiFi6対応子機でなくても遠くが高速になりました)<p><span class="text-wrap-display"><span> Archer AX20 WiFiルータを購入しました。</span></span></p><p><span class="text-wrap-display"><span>[Aterm WG2200HP</span>]を使っていたのですが、もうそろそろ数年になるので買い換えよう、という軽い動機です。</span></p><p><span class="text-wrap-display">NEC ルータの設定画面が重い、というのもちょっとあります。</span></p><p><span class="text-wrap-display">(設定画面なんて何もなければ数年は触りませんが、触るのは何かあったタイミングなので、遅いとストレスがある)<br /></span></p><p><span class="text-wrap-display">結果として、期待していなかったのですが思いがけずWiFi環境が改善して驚きました。</span></p><p><span class="text-wrap-display"> </span></p><p><span class="text-wrap-display"> </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-48l1zsXDKK0/X6lQixmWqGI/AAAAAAAAGlc/gDJ2KhcvkuYSJBlRhoWF8opKQ-jf2GVqQCLcBGAsYHQ/s2048/IMG_20201109_202032.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" src="https://1.bp.blogspot.com/-48l1zsXDKK0/X6lQixmWqGI/AAAAAAAAGlc/gDJ2KhcvkuYSJBlRhoWF8opKQ-jf2GVqQCLcBGAsYHQ/s320/IMG_20201109_202032.jpg" width="320" /></a></div><br /><p></p><p><span class="text-wrap-display"> </span> <br /></p><p>[Archer AX20 新世代Wi-Fi 6 無線LANルーター 1201+574Mbps MU-MIMO W PA3 Dバンド]</p><p>TP-Linkのルータは同じ製品に2つ以上の名前が ついているようで混乱しますが。<br /></p><p>設定画面では[ <span class="text-wrap-display">AX1800 Wi-Fi 6 Router]と名乗っています。</span></p><p><span class="text-wrap-display"> </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-prwDFEmXWaA/X6lRdS2oJmI/AAAAAAAAGls/LSIh3j0_IMEkAHPGRNKuRQDv2pewf6sAACLcBGAsYHQ/s1686/%25E5%2590%258D%25E7%25A7%25B0%25E6%259C%25AA%25E8%25A8%25AD%25E5%25AE%259A.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1179" data-original-width="1686" src="https://1.bp.blogspot.com/-prwDFEmXWaA/X6lRdS2oJmI/AAAAAAAAGls/LSIh3j0_IMEkAHPGRNKuRQDv2pewf6sAACLcBGAsYHQ/s320/%25E5%2590%258D%25E7%25A7%25B0%25E6%259C%25AA%25E8%25A8%25AD%25E5%25AE%259A.png" width="320" /></a></div><br /> <br /><p></p><p><span class="text-wrap-display"> 少し困ったのは、いちばん最初にWANにPPPoE接続でインターネットにつながるまで、時間がかかりました。</span></p><p><span class="text-wrap-display">2回ほど接続失敗し、最終的に再起動などを試しているうちに接続されました。</span></p><p><span class="text-wrap-display">以下、開封写真。 <br /></span></p><p><span class="text-wrap-display"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Ty5xwWNL090/X6lRlIIPjbI/AAAAAAAAGl0/4jN0sxfyhOMw3a5XIutgqrvt3VfmwYSzwCLcBGAsYHQ/s2048/IMG_20201109_201952.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-Ty5xwWNL090/X6lRlIIPjbI/AAAAAAAAGl0/4jN0sxfyhOMw3a5XIutgqrvt3VfmwYSzwCLcBGAsYHQ/s320/IMG_20201109_201952.jpg" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-JQ_CYiew4rM/X6lRlaSmmGI/AAAAAAAAGl4/nQ6ELqBrOmk-AH6RM3hkvWJ4m4g72m8_ACLcBGAsYHQ/s2048/IMG_20201109_202011.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="320" src="https://1.bp.blogspot.com/-JQ_CYiew4rM/X6lRlaSmmGI/AAAAAAAAGl4/nQ6ELqBrOmk-AH6RM3hkvWJ4m4g72m8_ACLcBGAsYHQ/s320/IMG_20201109_202011.jpg" /></a></div><p></p><p><span class="text-wrap-display">こんな感じで入っています。</span></p><p><span class="text-wrap-display">最初、箱のサイズが大きいなと思ったのですが、面の大きさでは、NECやバッファローの箱型のルータの1.5倍サイズがあります。(厚みは少し薄い) <br /></span></p><p><span class="text-wrap-display"><br /></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Oe6f-AFwb74/X6lRl4F9t5I/AAAAAAAAGl8/v_xKNPlIXb4fjAg9-zM1GaDS-9RBs43QACLcBGAsYHQ/s2048/IMG_20201109_202106.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" src="https://1.bp.blogspot.com/-Oe6f-AFwb74/X6lRl4F9t5I/AAAAAAAAGl8/v_xKNPlIXb4fjAg9-zM1GaDS-9RBs43QACLcBGAsYHQ/s320/IMG_20201109_202106.jpg" width="320" /></a></div><p></p><p><span class="text-wrap-display">GPLライセンスの告知。</span></p><p><span class="text-wrap-display">しっかりしてるの好感がもてます。</span></p><p><span class="text-wrap-display"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-C-t3upL4zJk/X6lRmKB84ZI/AAAAAAAAGmA/usI03bv-e48bbBgOgXSgnxNuuxc-JN_twCLcBGAsYHQ/s2048/IMG_20201109_202204.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" src="https://1.bp.blogspot.com/-C-t3upL4zJk/X6lRmKB84ZI/AAAAAAAAGmA/usI03bv-e48bbBgOgXSgnxNuuxc-JN_twCLcBGAsYHQ/s320/IMG_20201109_202204.jpg" width="320" /></a></div><p></p><p><span class="text-wrap-display">入っているLANケーブルはCET5eでした。別にそれで困らないとは思いますが、ウチではすでにあるCAT6ケーブルを使いました。<br /></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-cgg04eJJNGg/X6lRmOFfFBI/AAAAAAAAGmE/ElzPGgyYyHcWycrTex1H4T1rCZmUAl1owCLcBGAsYHQ/s2048/IMG_20201109_202252.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" src="https://1.bp.blogspot.com/-cgg04eJJNGg/X6lRmOFfFBI/AAAAAAAAGmE/ElzPGgyYyHcWycrTex1H4T1rCZmUAl1owCLcBGAsYHQ/s320/IMG_20201109_202252.jpg" width="320" /></a></div><p></p><p><span class="text-wrap-display">裏側。</span></p><p><span class="text-wrap-display">裏側のネジ口ですが、写真で見て上下にハマるミゾがあり、左右方向にはありません。</span></p><p><span class="text-wrap-display">なので壁掛けの際、アンテナが横に向くように釣ろうとすると、ひっかかりがなくてオチてしまうかもしれません。</span></p><p><span class="text-wrap-display">またミゾは浅いので、壁掛けのフックでは厚みで うまくひっかかりません。</span></p><p><span class="text-wrap-display">ダルマ型画鋲あたりが必要です。 <br /></span></p><p><span class="text-wrap-display"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-u7vNUhJ59U4/X6lRmkhZQUI/AAAAAAAAGmI/Gz-FhcvCAWUCpOmHo89PdbQPMnCzVxO8ACLcBGAsYHQ/s2048/IMG_20201109_202310.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" src="https://1.bp.blogspot.com/-u7vNUhJ59U4/X6lRmkhZQUI/AAAAAAAAGmI/Gz-FhcvCAWUCpOmHo89PdbQPMnCzVxO8ACLcBGAsYHQ/s320/IMG_20201109_202310.jpg" width="320" /></a></div><br /> LANとWANの口。<p></p><p><span class="text-wrap-display">写真では見づらいですが、電源含むボタン類もこの面に集まっています。</span></p><p><span class="text-wrap-display">LEDがボタン一つで消灯できるのは嬉しかったです。 </span></p><p><span class="text-wrap-display"><br /></span></p><p><span class="text-wrap-display">電波強度について</span></p><p><span class="text-wrap-display">家のドア3つ隔てた家の端でWiFi通信して、画像ダウンロード表示がストレスない程度に高速になりました。</span></p><p><span class="text-wrap-display">(以前のNECルータを使っていたときは、この距離ではワンテンポあって、複数枚画像のあるページでは読み込みが10秒以上とか、Twitter読み込みに失敗することもありました)</span></p><p><span class="text-wrap-display"><br /></span></p><p><span class="text-wrap-display">我が家にWiFi6子機はなく、 経年で故障前にしておこうくらいの買い替えでした。</span></p><p><span class="text-wrap-display">前のNECルータも5Ghz対応済みの機種で、WiFi6子機でなければ他のWiFi通信条件は同じだろうという感じです。</span></p><p><span class="text-wrap-display"> </span></p><p><span class="text-wrap-display">なので、高速化などは特に狙っていなかったのですが、WiFi環境が改善したため、</span><span class="text-wrap-display"><span class="text-wrap-display">思いがけず</span>良い買い物でした。</span></p><p><span class="text-wrap-display"><br /></span></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B087Z9DY4X&linkId=83e395e328faabb25dc058332385c7c1&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=michinarinuka-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B08G1H1R8H&linkId=6e311f527b5548c1a59cae0163053796&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=ffffff&f=ifr" style="height: 240px; width: 120px;">
</iframe><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-83535372372621441092020-10-17T17:09:00.002+09:002020-10-17T18:00:35.702+09:00spectronの新しい記法 (WebdriverIO v5対応その2)<p></p><p>electron9~10あたりで、UIテストツールであるspectronのバックエンドのwebdriverioが、v4から v5に更新されました。</p><p>呼び出しが非同期に変化して、これまでのメソッドチェーンを使う記法が動作しなくなったため、テストの全面書き直しが必要となります。</p><p>webdriverio自体に実践的なサンプルが見つからなかったりして難儀しましたが、いろいろ調べて、最終的に参考にしたのはwebdriverioのドキュメントでした。 <br /></p><p><br /></p><p><a href="https://webdriver.io/docs/api.html">https://webdriver.io/docs/api.html</a></p><p>```</p><p><span style="font-family: courier;"><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;">it(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #dd1144; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: 400; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">'can handle commands using async/await'</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;">, </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #333333; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: bold; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">async</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"> </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #333333; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: 400; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;"><span class="hljs-keyword" style="border: 0px none; box-sizing: border-box; color: #333333; font-size: 12px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">function</span> (<span class="hljs-params" style="border: 0px none; box-sizing: border-box; font-size: 12px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"></span>) </span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;">{
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #333333; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: bold; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">const</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"> inputElement = </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #333333; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: bold; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">await</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"> $(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #dd1144; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: 400; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">'#input'</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #333333; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: bold; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">let</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"> value = </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #333333; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: bold; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">await</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"> inputElement.getValue()
</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #0086b3; font-size: 12px; font-stretch: inherit; font-style: normal; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: 400; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">console</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;">.log(value) </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; border: 0px none; box-sizing: border-box; color: #999988; font-size: 12px; font-stretch: inherit; font-style: italic; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-weight: 400; letter-spacing: normal; line-height: inherit; margin: 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: pre; word-spacing: 0px;">// outputs: some value</span><span style="-webkit-text-stroke-width: 0px; background-color: #f8f8f8; color: #333333; display: inline; float: none; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;">
})</span> </span><br /></p><p>``` <br /></p><p> </p><h3 style="text-align: left;">以前のspectron(WebdriverIO v4のメソッドチェーン)</h3><p>```</p><p><span style="font-family: courier;"> it("input basic test", function() {<br /> return this.app.client.waitForVisible('#query-area__query-input__input')<br /> .waitForEnabled('#query-area__query-input__input')<br /> .clearElement('#query-area__query-input__input')<br /> .setValue('#query-area__query-input__input', "Bonan matenon!")<br /> .getValue('#query-area__query-input__input')<br /> .then(function(text){assert(text === 'Bonan matenon!')})<br /> })</span> <br /></p><p>```<br /></p><h3 style="text-align: left;">新しいspectron(WebderiverIO v5のasync/await)</h3><p>```</p><p><span style="font-family: courier;"> it("input basic test", async function() {<br /><br /> const inputElement = await this.app.client.$('#query-area__query-input__input');<br /> let text;<br /> text = await inputElement.getValue();<br /> console.log(`before:'${text}'`);<br /> await inputElement.waitForEnabled()<br /> await inputElement.clearValue()<br /> await inputElement.setValue("Bonan matenon!")<br /> text = await inputElement.getValue();<br /> console.log(`after:'${text}'`);<br /> assert(text === 'Bonan matenon!')<br /> // assert(text === '') // test to test (falure)<br /> })</span> <br /></p><p>``` </p><p>今回書き換えたソース: <br /></p><p><a href="https://github.com/MichinariNukazawa/lina_dicto/blob/master/lina_dicto/test/input_ui.js">https://github.com/MichinariNukazawa/lina_dicto/blob/master/lina_dicto/test/input_ui.js</a><br /></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-7bVp6GwKar4/X4qmMf4mEYI/AAAAAAAAGYs/QOJv_JKn87Q0hFhdW2FMRcOj_k-o7nbpgCLcBGAsYHQ/s1572/Screenshot%2Bfrom%2B2020-10-17%2B17-06-43.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1054" data-original-width="1572" src="https://1.bp.blogspot.com/-7bVp6GwKar4/X4qmMf4mEYI/AAAAAAAAGYs/QOJv_JKn87Q0hFhdW2FMRcOj_k-o7nbpgCLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2020-10-17%2B17-06-43.png" width="320" /></a></div><p></p><h3 style="text-align: left;">## Element がないことをテストする処理に時間がかかる?<br /></h3><p>```</p><p><span style="font-family: courier;"> // このnot existテスト部分で5000msec近くかかるようだが詳細不明<br /> isExisting = await preprintElement.isExisting();<br /> assert(! isExisting); // not exist </span><br /></p><p>```<br /></p><p></p><p><br /></p><p>以上です。<br /></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0tag:blogger.com,1999:blog-5478526694670659925.post-67579462396638898042020-10-17T16:44:00.005+09:002020-10-17T16:44:38.745+09:00spectronの新しい記法 (WebdriverIO v5対応その1)<p>electronのUIテストであるspectronのバックエンドのwebdriverioが、v4から v5に更新されました。</p><p>呼び出しが非同期に変化して、これまでのメソッドチェーンを使う記法が動作しなくなったため、テストの全面書き直しが必要となります。</p><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-NKoF4ugTQVY/X4oY3HLxHEI/AAAAAAAAGYg/HfnNqM6pkcQQu7plVzZZm7vcjZp-AJKiACLcBGAsYHQ/s2048/Screenshot%2Bfrom%2B2020-10-17%2B07-01-51.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1731" data-original-width="2048" src="https://1.bp.blogspot.com/-NKoF4ugTQVY/X4oY3HLxHEI/AAAAAAAAGYg/HfnNqM6pkcQQu7plVzZZm7vcjZp-AJKiACLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2020-10-17%2B07-01-51.png" width="320" /></a></div><br /> <p></p><p> <br /></p><p>webdriverio自体に実践的なサンプルが見つからなかったりして難儀しました。</p><p>そのうちspectron公式サイトのトップにサンプルが載っているのを発見。</p><p>https://www.electronjs.org/spectron</p><p>基本のWindow表示テストですが、v4のテストコードを引き写してきた覚えのある手元の同等テストとはあれこれ違う感じです。</p><p>引き写したというのはREADME.md のmochaも使ったテストで、これ自体はv5環境下でも動作します。<br /></p><p> https://github.com/electron-userland/spectron</p><p> </p><p>ここでは、v5対応の準備運動代わりに、サンプルにいろいろ追加してみました。</p><p> </p><h3 style="text-align: left;">## CIテストに組み込むのでパスを固定値から自動判定に変更したい</h3><p> </p><p>```</p><p><span style="font-family: courier;">const electronPath = require('electron') // Require Electron from the binaries included in node_modules.<br />const path = require('path')<br /><br />var app = new Application({<br /> //path: '/Applications/MyApp.app/Contents/MacOS/MyApp'<br /> path: electronPath,<br /> args: [path.join(__dirname, '..')]<br />})</span> <br /></p><p>``` <br /></p><p> </p><h3 style="text-align: left;">## assert()でエラーを検出した場合に、最終的に自動で停止してほしい</h3><p>エラーが起こってcatch節に落ちると、Ctrl+CでKillするまでターミナルに帰ってこない。 </p><p>ローカルのターミナルでテストしている限りは少し不便なだけだが、このままではCIに都合が悪い(いずれタイムアウトするだろうが、早く終わらせてエラー通知させたい)。</p><p>catch節に落ちた際に、能動的に`app.stop()`を呼ぶことでテストが終了しターミナル操作が帰ってくる。</p><p>```</p><p><span style="font-family: courier;"> return app.stop()<br />}).catch(function (error) {<br /> // Log any failures<br /> console.error('Test failed', error.message)<br /> app.stop() // ++ exit test and return to terminal control.<br /></span></p><p><span style="font-family: courier;">})</span> <br /></p><p>```<br /></p><p> </p><p> </p><h3 style="text-align: left;">## assert()でエラーを検出した場合に、ターミナルにエラーコードを返す</h3><p>サンプルコードのままでは、ターミナルへの戻り値がゼロになっており、CIでエラー検出できない。</p><p> これはassert()ではやらず、タイムアウトで実現した。</p><p>mochaテストフレームワークに、非同期テストのために 「done()を呼ばないとタイムアウトになる」という仕組みがあるので、それを利用した。</p><p> </p><p> ```</p><p><span style="font-family: courier;">it("Test for Window", function(done){ // ++ In mocha testing framework<br /> app.start().then(function () {<br /> ~<br /> }).then(function () {<br /> // Stop the application<br /> <br /> done(); // ++ Test result to Success<br /> return app.stop()<br /> }).catch(function (error) {<br /> // Log any failures<br /> console.error('Test failed', error.message)<br /> app.stop()<br /> <br /> // done(); // ++ Test result `not done()` is Failure, of timeout when catched error.<br /> }) <br />}).timeout(4000); // ++ Optional timeout msec (default 2000) <br /></span></p><p>``` <br /></p><p>実行結果:</p><p>``` <br /></p><p><span style="font-family: courier;">MN@daisy-bell:lina_dicto/$ ARG=wakeup make test<br />cd lina_dicto && npm run test test/wakeup<br /><br />> lina_dicto@0.2.11 test /home/nuka/lina_dicto/lina_dicto<br />> mocha --require intelli-espower-loader "test/wakeup"<br /><br /><br /><br />Test failed # test/wakeup.js:26<br /> <br /> assert.equal(title, "lina_dicto - Esperanto / Japanese -xx")<br /> | <br /> "lina_dicto - Esperanto / Japanese -" <br /> <br /> 1) window<br /><br /> 0 passing (2s)<br /> 1 failing<br /><br /> 1) window:<br /> 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)<br /> at listOnTimeout (internal/timers.js:554:17)<br /> at processTimers (internal/timers.js:497:7)<br /><br /><br /><br />npm ERR! code ELIFECYCLE<br />npm ERR! errno 1<br />npm ERR! lina_dicto@0.2.11 test: `mocha --require intelli-espower-loader "test/wakeup"`<br />~<br />MN@daisy-bell:lina_dicto/$ echo $?<br />2</span><br />```<br /></p><p><br /></p><p><br /></p><p><br /></p><p> <br /></p><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div><div style="background: rgb(215, 255, 215) none repeat scroll 0% 0%; border-radius: 3px; border: 1.5px solid rgb(0, 170, 0); display: none; left: 10px; padding: 4px; position: fixed; top: 10px; width: auto;"><div style="font-family: Consolas, "Courier New", Courier, Monaco, monospace; font-size: 60%;"></div><div style="display: none; font-size: 100%;"></div></div>MNukazawahttp://www.blogger.com/profile/17936641723635159393noreply@blogger.com0