pipでアップデートを半自動的に行う方法。

結論から先に書きますが、全然半自動にすらなっていません。試してみたことのメモです。

Python 2/3でいくつかのモジュールをPyPiからインストールして使用していますが、モジュールがアップデートされたときにはキャッチアップしたいときがあります。ところが現状 pip ではアップデートがあるモジュールを自動で検索して全部を一括してアップデートできません。

pipに一括アップデートがない理由のひとつは、モジュールの依存関係にあるようです。
あるモジュールAが、たとえばモジュールBのバージョン 1.0 に依存しているとします。モジュールAはバージョンアップしていませんが、モジュールBが2.0にバージョンアップしました。ところがモジュールBのAPIが変わってしまい、モジュールAはモジュールB 2.0では動作できなくなりました。
というようなことが現実に起こり得るため、盲目的な一括アップデートは推奨されていません。

また、検索してみるといくつかヒットして、いずれも "pip list" で一覧を取得して、総当たり的にすべてのモジュールに "pip install -U" をしかけるという形のようです。同様のことが、Unix系の環境では pipdate というユーティリティで行えます。これは pipdate / pipdate3 というスクリプトと、pipdateモジュールを提供していますが、スクリプトの方は以下のようになっていました。

pipdate3:
pip3 freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install -U

同様に依存関係には無頓着にアップデートしてしまうようです。

依存関係をチェックするためには、pipdeptree があります。

自分の環境で pipdeptree を使ってみたらコンフリクトの警告が出ました。

$ pipdeptree
Warning!!! Possibly conflicting dependencies found:
* neovim-remote==2.0.10
 - neovim [required: >=0.2.3, installed: ?]

これは、neovim-remote が neovim-python に依存しているのに、neovim-pythonからpynvimへ。で触れたように neovim-python が廃止されたから、でしょう。

ということで neovim-remote をアップデートします。
$ pip install -U neovim-remote
Collecting neovim-remote
  Downloading https://files.pythonhosted.org/packages/23/55/89b7528c43771e63b0b035b78dd8a05de29cc8c7a9bcf1b1b155df095a6f/neovim-remote-2.1.3.tar.gz
Requirement already satisfied, skipping upgrade: pynvim in c:\apps\python37\lib\site-packages (from neovim-remote) (0.3.1)
Requirement already satisfied, skipping upgrade: psutil in c:\apps\python37\lib\site-packages (from neovim-remote) (5.4.6)
Requirement already satisfied, skipping upgrade: setuptools in c:\apps\python37\lib\site-packages (from neovim-remote) (39.0.1)
Requirement already satisfied, skipping upgrade: msgpack>=0.5.0 in c:\apps\python37\lib\site-packages (from pynvim->neovim-remote) (0.5.6)
Requirement already satisfied, skipping upgrade: greenlet in c:\apps\python37\lib\site-packages (from pynvim->neovim-remote) (0.4.13)
Installing collected packages: neovim-remote
  Found existing installation: neovim-remote 2.0.10
    Uninstalling neovim-remote-2.0.10:
      Successfully uninstalled neovim-remote-2.0.10
  Running setup.py install for neovim-remote ... done
Successfully installed neovim-remote-2.1.3

$ pipdeptree --packages neovim-remote
neovim-remote==2.1.3
  - psutil [required: Any, installed: 5.4.6]
  - pynvim [required: Any, installed: 0.3.1]
    - greenlet [required: Any, installed: 0.4.13]
    - msgpack [required: >=0.5.0, installed: 0.5.6]
  - setuptools [required: Any, installed: 39.0.1]
これで警告が消えました。

今回は簡単でしたが、一括アップデートしたい場合には、pipdeptreeで「バージョンがxx以下であること」という依存関係があるかどうかをチェックしてから行うほうが安全のようです。そういう目で見てみると、

flake8==3.5.0
  - mccabe [required: >=0.6.0,<0.7.0, installed: 0.6.1]
  - pycodestyle [required: >=2.0.0,<2.4.0, installed: 2.3.1]
  - pyflakes [required: >=1.5.0,<1.7.0, installed: 1.6.0]
requests==2.21.0
  - certifi [required: >=2017.4.17, installed: 2018.11.29]
  - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
  - idna [required: >=2.5,<2.9, installed: 2.8]
  - urllib3 [required: >=1.21.1,<1.25, installed: 1.24.1]
あたりは引っかかりそうです。 あとついでに、pip自身のバージョンが古いんですけどー、といわれた場合には、Windowsの場合は
python -m pip install -U pip
を、Linuxの場合は
pip install -U pip
すればいいです。
"-U" は "--upgrade" と同じ意味です。

Contact Form 7にreCapcha v3を導入する。

WordPressでサイトを運用していて、「お問い合わせページ」などを Contact Form 7で作成し、さらにスパム避けに reCAPCHA を使っているのですが、Contact Form 7がバージョンアップして reCAPCHA v3 への対応になりました。それに伴って、これまで [recapcha] と指定していた Contact Form 7 の問い合わせフォームのキーワードが無視されるようになりました。

reCAPCHA v3 のページには、Fronend integrationとして設定例が載っていますが、Contact Form 7はreCAPCHA v3に対応しているのでこれは不要になります。正確には Contact Form 7 の「インテグレーション」メニューから reCAPCHA v3 をインストールすることで、自動的に Contact Form 7 が reCAPCHA v3 を利用するようになります。また、これまで使っていた問い合わせフォームの [recapcha] は単純に削除されます。

reCAPCHA v3はこれまでのような「ユーザにロボットでないことを入力させる」という動作がなくなります。同時に、これまで使っていた v2 の登録キーが使えなくなり、新たに v3キーを取得する必要があります。

登録方法は他に譲るとして、v3はどういう動作になるのかをドキュメントから簡単にまとめてみます。

reCAPCHA v3 は、これまで主流だった CAPCHA によるユーザ確認(難読化した文字を読み解いて入力させるとか、チェックボックスをチェックさせるとか)を廃止し、ユーザの "アクション" をもとにしてスコアを生成して送信します。より精度の高いスコアを生成するためには、サイトの複数のページに reCAPCHA v3 を埋め込んで動作させることが推奨されます。それによってユーザの動作を追跡し、SPAMボットかどうかを判定することが容易になります。reCAPCHA v3の動作の様子は、reCAPCHA管理コンソールで確認できます。

安全グラス。

PCでの作業や、細かい作業をするときにはメガネが必要なのですが、電動工具を使うときにも眼球へのダメージを防ぐために安全グラス、安全ゴーグルは必須です。

この時期ですとスポーツ用品店で、防曇(ぼうどん)仕様のスキーゴーグルなんかがよいかもしれませんが、オールシーズン通じてとなるとスキー用は夏場がちょっと…。それにバンドの部分が汗で大変なことになったりもしますし、水洗いも気軽にできるという点ではグラス型のほうが好みです。ただ、横までカバーしないものは粉塵に対しては防御力が薄いですし、グラス型でもサイドまで防護してくれるものが理想です。

自分ではメガネ対応の安全ゴーグルとして "Crews Yukon XL Z87+ Safety Glasses" というのを使っています。透明性も高く、メガネ越しでも歪みがほとんどないので結構気に入っていますが、これが防曇(antifog / defog)ではないので曇りやすいのと、ちょっと小傷がついてきたので磨けないかということで調べてみました。

素材はポリカ、ANSI Z87+の耐衝撃性とCSA Z94.3に適合しているということらしいです。'+'というのは余裕でクリアしているというアピールでしょうか。認証をとっているかどうかはよくわかりません。

ミドリ安全の保護メガネには、海外規格との比較というページがあります。ここでANSI Z87.1規格について出ていますが、屈折率とか非点収差度、耐衝撃性などがわかります。さすが、ミリタリー規格だけあってZ87は数値が厳しいです。

ミドリ安全では防曇・メガネ併用型でANSI規格も対応しているVS-302Fというものがあるようですね。ツルはナイロンでボディはポリカとのことです。
また、スキーゴーグルではスワンブランドの山本光学ではオーバーグラス SN-770というのもあるようです。こちらはANSIについては書かれていません。

さて、こうした安全グラスも工具箱などに放り込んでしまうとあっという間に傷だらけです。そうすると視界が悪くなってきますし、光が散乱して見づらくなってくるというのもありますので、できるだけ傷はつけたくないものです。それでもついてしまった傷は、材質がポリカですから、自動車のヘッドライト研磨と同様に処理できるはずです。

具体的には、ちょっと深めの傷があれば400番程度から、ちょっとした擦り傷程度なら1000番程度からの耐水ペーパーで水研ぎし、2000番、3000番、4000番あたりまで使って(3000番以降はお好みで)研磨してから、研磨剤で磨いてやるといいようです。

ペーパーだと指先の部分だけ強くあたってしまうため、スポンジ研磨材というものも有効なようです。3Mから、5083(#320~#600)、5084(#800~#1000)、5085(#1200~#1500)という感じで出ています。ただ結構お高いので、これなら安全グラスを買い替えてしまったほうが安そうです。

いずれにしても、自分にあった安全グラス・安全ゴーグルを一つは用意しておきたいものです。

Windows10の新しいSandbox。

Windows Sandbox is a new lightweight desktop environment tailored for safely running applications in isolation.

Windows10にSandbox機能が追加されるというお話。

Sandboxというのは本来のシステムとは隔離された環境のことで、たとえば疑わしいアプリケーションをSandboxで動かせば、万が一ということがあっても本来のシステムは影響を受けなくなります。

たとえばPythonであればvirtualenvがそれに当たります。

WindowsでSandboxを使いたい場合、今まではVirtualBoxなどの仮想環境を持ってきて、そこにWindows仮想PC環境を構築する方法が取られていました。このとき、その仮想マシンのスナップショットを保存しておけば、何かをインストールして問題が起こった場合でもロールバックできます。

Windows Sandboxは仮想マシンを使わなくてもSandboxを利用できる、というのが上記のリンクの内容です。

ただし利用するには条件があって、Windows 10 Pro または Enterpriseエディションであることが必要とのこと。さらにこの機能は今のところInsider build 18305以降でしか利用できないようです。またメモリを4GB(できれば8GB以上)、CPUコアを2つ以上(できれば4つ)あることが望ましいようです。

うちではProエディションですが、バージョンは1803でInsiderではありませんからまだ当面は使えそうにありません。

また仮想マシンとは異なり、あるアプリケーションをインストールした状態で停止することができません。Sandboxは毎回完全にクリーンな状態で起動するということで、たとえば日本語Windows10上で英語Windows10の開発環境を構築するというような目的の場合にはこれまで通り仮想マシンを使う必要があります。

Notepad++にPlugin Managerをインストールする。

エディタはPCを使うときになくてはならないものですが、うちでは秀丸、gVim、Notepad++、Neovim、Visual Studio Codeの5種類を目的に応じて使い分けています。さらにファイルの差分をみたいときにはWinMergeを使っています。
また、PICのプログラミングをするときにはMPLAB IDEを、C#やPythonを使うときにはVisual Studio 2017を使うときもあります。

ところで最近のNotepad++にはPlugin Managerがついていません。これは作者の方針で、Plugin ManagerがAdwareであり、広告を表示するのでバンドルしないことにした、ということです。同時に「広告を表示しない新しいPlugin Managerを開発中だ」ともありました。

反面、広告入りであれ従来のPlugin Managerは大変使いやすかったためにファンも多く、コミュニティでは再バンドルを求める声もずっと続いていて、ユーザが自分の判断で追加でインストールすることは可能です。

githubのbruderstein/nppPluginManagerにはコンパイル済みバイナリがリリースされているので、ここから適切なバージョンをダウンロードし、%ProgramFiles%\Notepad++ディレクトリ以下にコピーするだけで使用できるようになります。64bit版のNotepad++の場合にはx64を、それ以外はUNIを選択すればOKです。

一方、Notepad++ v.7.6からは新しいPlugins Adminが同梱されるようになりました。

Notepad++ v.7.5.xからv.7.6.xへは、これまでのupdaterではアップデートできないため、ユーザが明示的にv.7.6.xをダウンロードしてインストールする必要があります。現在のバージョンはv.7.6.1で64bit環境の場合には下の方にx64インストーラがあるのでこれを使います。もちろん32bit版でもまずいことはありませんが。


見て分かる通り、Plugins Adminにチェックが入っています。

インストール後に起動すると、プラグインメニューに「プラグイン管理」の項目があります。


見た目もこれまでのPlugin Managerに似ているため、違和感なく使えるでしょう。

ということでv7.5.xを使っている人はv.7.6.xにアップグレードを推奨です。

18%グレーの作り方。

写真ってなんでしょうか。

映像を記録するもの、なんですが、そこには2つのアプローチがあると思っています。1つは写実という観点。これは現実をできるだけそのまま写し取ることが目的です。カラー、白黒、セピアなど色彩にはいろいろありますが、いわゆる撮って出し。撮ったあともトリミングや露出補正などはしますが、基本的には被写体に忠実であることが求められます。もう一つが表現という観点。いわゆるアート、芸術です。たとえば夕焼けのオレンジを強調したり、モノクロ写真の一部だけをカラーにしてみたり、フィルターなどを使って加工してみたり。

フィルムカメラをやっていた頃は多彩な表現というのは難しく、フィルム、ライティング、現像方法、焼付、レンズフィルタなどで表現を創出していました。

一方、デジタルカメラでは受光素子は固定のため、一部のレンズフィルタなどを除いて後処理ですべてを決定していきます。そのときに基準となるのがカラーチェッカーです。

カラーチェッカーは色味の確認のためにスタジオなどでの撮影には必須です。照明などの条件を一緒にして撮影しておけば、のちの確認の際に使えます。もちろんフィルムカメラでも使用しますし、最終的な印刷の際にも色合わせで使用します。スタンダードなのはx-riteのColorChecker Classicです。


また、色見本的なカラーチェッカーとは別に、露出やホワイトバランスを決定するのに18%グレーというのがよく使われます。


これはx-riteのColorChecker Gray Scaleですが、中央のグレーが18%です。

WEB上には "18% gray card" で検索するとPDFなども見つけることができますが、ここでは自分のところで作ってみます。

いつも使っている Krita では印刷機能がないのと、どうもLab色空間の扱いに難がありそうなので GIMP2を使います。

  1. 「ファイル」→「新しい画像」で新規ファイルを作成します。サイズは自分の欲しいサイズにします。印刷して使う場合には、プリンタのdpiを調べて「詳細設定」で指定しておきます。
  2. 色の設定をします。HSVを選択し、Vを50にします。
  3. 塗りつぶしツールを選択して、ファイルを塗りつぶします。

これで希望のサイズのグレーカードができました。あとは真っ白い厚紙か、印刷可能なプラ板などに印刷すれば使えます。

自分の場合、ノートPCの液晶画面にどうも色むらがありそうなので背景として表示してチェックするのに使用しました。特におかしなところはなくてやれやれです。

UVレジン価格比較表。

UV硬化型レジン。ではパジコの製品を比べましたが、ここでは清原のものとの価格を比較します。()内はアマゾンの価格を引いてきています。

メーカー パジコ 清原
品名 太陽の雫 UVR500G
価格(25g) 1200円(1136) 1500円(857)
gあたり単価 48(45.44) 60(34.28)
価格(55g) 2900円(1663)
gあたり単価 52.73(30.24)
価格(100g) 3800円(2917)
gあたり単価 38(29.2)
価格(200g) 6800円(4205)
gあたり単価 34(21.03)
価格(500g) 15500円(10280) 19800円(13764)
gあたり単価 31(20.56) 39.6(27.53)

g単価だと、パジコの200g、500gがかなり安いですね。ただ、価格でいうなら2液のレジンのほうが安いです。

資材や工具の通販。

会社での仕事やDIY的な作業に使う資材や工具は、ドイト、カインズホーム、ジョイフル本田などの実店舗に行って現物を確認してから購入したり、Amazonやヨドバシドットコム(そういえば最近ドットコムってあまり聞かなくなった気が)、モノタロウや楽天などを使い分けたりしています。

最近価格.comで安値の方に出てくるのがDCMオンラインで、しかも自サイトだけじゃなくて楽天にもYahoo!にも出店してたりしてすごいですね。たしかに新しく通販アカウントを作るよりは、楽天会員なら楽天に出店してればそちらで買うでしょうし商売がうまい感じです。

実はアルミパイプを切断する必要があって、9.0φx0.5mmという薄いアルミパイプなのでチップソーや切断砥石を使うほどではないため、パイプカッターで切ることにしました。ちょっと個数が多いので大変ですが、このくらいのサイズだとパイプカッターを固定してパイプを回せば簡単に切れます。

当然ながらパイプカッターは押し切る構造なので、切り口は内側にバリが出ます。そのバリをきれいに削りたいので、先日購入したIXO5というコードレスドライバに使える六角軸の面取りカッターを探していたのでした。

9.0φx0.5mmということは内径は8.0φなので、実はスチールデスクの引き出し修理に使用したステップドリルの8mmの部分でもできるのですが、面取りカッターがひとつあれば皿木ねじなどの皿もみにも使えるのでちょっと調べていて、DCMオンラインというのが気になったので調べてみました。

DCMオンラインはDCMホールディングスが経営しているネットショップで、ダイキ(愛媛)とカーマ(東海・北陸)、ホーマック(北海道・東北・関東)が経営統合し、そこに三井物産が物流として絡んでいるけっこう大きい会社です。さらに2017年にはケーヨー(ケーヨーデイツー、関東甲信越・東海・近畿)とも資本・業務提携していて、ホームセンターとしてはかなり大きい感じです。

今回欲しかったのは新潟精機のRM-12という六角軸タイプの面取りカッターで、これがAmazonだと1,080円、ヨドバシだと850円、DCMオンラインだと670円と、かなり値段に開きがあって気になります。

店の名前というともうひとつ気になっているのが藤原産業。SK11というブランドはよく見ますが、最近E-Valueというブランドも出しているようです。が、その棲み分けが今ひとつわかりません。まったく同じものをブランドだけ変えて出しているケースもあるようです。最初E-Valueは中国の怪しげなブランドだと思ってしまいましたが…。
藤原産業のサイトには、SK11はスタンダードブランド、E-Valueはベーシックブランドとの説明がありますが、どう違うのやらさっぱりです。

パイプカッターの替刃。

以前に自転車のハンドルバーの長さを切り詰めるためにパイプカッターを購入しました。
今回、別件でまたパイプカッターを使うことになりそうなので工具箱から出してきました。

手元にあるのは新潟精機(SK)のパイプカッター PC-Mです。Mサイズということで、アームの内側に適用パイプ径が刻んであり、4-28mmとなっています。新潟精機には一回り大きいPC-Lというパイプカッターもあり、こちらは6-42mmです。

パイプカッターは、パイプを加えこませてパイプの周りをぐるぐる回しながらネジを回してカッター刃を切り込ませていきます。壁際のパイプなどのように回すスペースがない場合にはラチェットパイプカッターという、ラチェット機構がついたものがあります。

ところでパイプカッターの刃は丸刃なのですが、新潟精機からは替刃として2種類でています。PCB-1とPCB-2です。それぞれ2枚組で売っていますが、値段はPCB-1のほうがPCB-2の倍くらい高いです。

何が違うのか、Amazonなどの通販サイトでは表示されていないので調べてみると、新潟精機のDIYカタログに説明がありました。

いわく、「ステンレスには別売品ステンレス用替刃 PCB-1をお求めください」だそうです。その他アルミや鉄パイプなどはPCB-2でよいようです。

L-SMASHとL-SMASH Works。

aviutlで動画を読み込むときにL-SMASH Worksを使っていますが、ちょっと調べたので自分用メモ。

まずL-SMASHから。
L-SMASHはISO Base Mediaファイルフォーマット及びMP4を含むその派生ファイルフォーマットを扱うクロスプラットフォームのライブラリです。
これだけだと抽象的すぎてよくわかりませんが、その下に機能説明があります。
  • β版レベルのMultiplexer(マルチプレクサ)及びDemultiplexer(デマルチプレクサ)として動作します。
  • スタンドアローンな実行ファイルを利用して、いくつかの形式の映像及び音声をmuxすることができます。
さらにその下にもうちょっと詳しい説明があります。
  • 任意のボックス(アトム)をエクスポートしたり、任意の位置に書き出すことができます。
  • カスタムI/O APIを提供しているため、ユーザーがメモリ上に入力や出力を行う処理を記述することが可能です。
  • Mux直後にプログレッシヴダウンロード用の最適化が可能です。
  • ムービーフラグメントによる出力が可能です。
  • インデックス済み自己初期化可能なセグメント('dash')の作成が可能です。
  • テストツール的な実行ファイルで以下に挙げるストリームをmuxすることができます。
    • 映像
      • AVC/H.264 | MPEG-4 Part10
      • HEVC/H.265 | MPEG-H Part2
      • SMPTE VC-1 Advanced Profile
    • 音声
      • MPEG-2 AAC および MPEG-4 AAC
      • MPEG-1/2 Layer 1|2|3
      • MPEG-4 ALS
      • AMR-NB/WB
      • AC-3およびEnhanced AC-3
      • DTSおよびDTS-HD
上の方は何を言っているのかよくわかりませんが、最後の「ストリームのmux」のところは理解できます。

L-SMASH自体はソースコードのみの提供で、公式なバイナリは配布されていません。コンパイルするにはC99のコンパイラが必要ですが、Visual C++(2017)のC99サポートは不完全なためコンパイルできるかどうかはわかりません。ソースアーカイブをダウンロードして展開すると L-SMASH.sln などのファイルがありますが、config.h がないとか lsmash.def がないとかのエラーが出てコンパイルはできませんでした。それ以上は調べていないので不明です。

L-SMASH WorksはこのL-SMASHにffmpegやlibavを使用して動作するaviutlなどで利用できるプラグインです。MSYS2とMinGW-w64などを使ってコンパイルされています。L-SMASH Works r935 release2では、L-SMASHがr1474、ffmpegが4.0.2でNVDECが使える(はず)とのことです。

L-SMASHのソースツリーをみると、boxdumper、muxer、remuxer、timelineeditorというのがあります。L-SMASH Worksではこれらがコンパイルされたものがありますので、単独で起動してみると、

boxdumper : L-SMASH isom/mov structual analyzer rev1474 f963b5a
muxer : L-SMASH isom/mov multiplexer rev1474 f963b5a
remuxer : L-SMASH isom/mov re-muliplexer rev1474 f963b5a
timelineeditor : L-SMASH isom/mov timeline editor rev1474 f963b5a

と出てきますが、それぞれが行うこと(あるいは行わないこと)が今ひとつわかりません。なので実際に使ってみます。

boxdumperは動画の構造を解析するツールで、構造解析した結果をテキストで書き出すものです。MP4ファイルを食わせてみると、以下のような出力を行います。


timelineeditorはMP4ファイルのタイムラインを編集するためのツールのようです。上のキャプチャにあるtimecodeなどをいじるためのもの、なのでしょうが、ドキュメントがないのでよくわかりません。たぶん規格にあたればわかるんでしょう。

muxer/remuxerですが、解説しているページを見つけました。Mux? Demux? Remux? Huh?です。

muxは要約すると2つもしくはそれ以上の信号を1つにまとめること。デジタルメディアファイルの世界では映像と、1つまたはそれ以上の音声トラック、字幕トラックをまとめることです。その他にもチャプタートラックなどもあります。

demuxはその逆で、muxされたファイルからストリームを分離します。

remuxは分離したものを再度muxすることです。なので、muxerはtimescaleなどを指定できますが、remuxerはできません。また、muxerは出力フォーマットを指定できますが、remuxerは指定できません。

いわば、muxerは分離されたビデオトラックとオーディオトラックを合成(マルチプレクス)するもので、remuxerはさらに追加でオーディオトラックを合成するときに使うもの、ということなのでしょう。

なので、すでにあるMP4ファイルにチャプターや字幕を「追加」したいときにはremuxerを使えばいいということです。

鉄製品の錆落とし。その2

鉄製品の錆落とし。では、サンポールを使ったらどうなるのかをちょっと考察してみたわけですが、サンポールの主成分である塩酸は酸化力が非常に強く、錆は落とせてもそのあとすぐにまたオレンジ色の錆が出てきてしまうため、洗浄後はよく水で洗いでからすぐに水置換性のオイルを塗るなどの対策が必要です。

一方で市販の液体錆落としはリン酸を使うものがけっこうあるようです。モノタロウなどで扱っている鈴木油脂工業の液体サビおとし S-012などがそうで、リン酸とグリコール系溶剤、非イオン系界面活性剤が成分です。

リン酸によって錆を落とすと、その後リン酸鉄の被膜が表面にできるためにすぐには酸化しにくくなります。この皮膜を生成する処理を「リン酸塩皮膜処理またはパーカライジング」といいます。

そういえば小学生の頃、御徒町にあったMGCのモデルガンショップでガンブルーという小瓶の液体が売られていて、それを購入してモデルガンに色付けしたことがありますが、たぶんそれもリン酸の水溶液がベースとなっていたのでしょう。このとき生成されるのがリン酸第一鉄で、酸素に触れると黒鉄色に変化します。

大きいものや錆を落としたい鉄の量が多いときには廃糖蜜を使うといいようです。
大きいペール(漬物用の樽など)に廃糖蜜を1:10で水で薄めたものに、錆びた鉄を数日から数週間浸けておくことで錆が分解されリン酸塩皮膜が形成されます。廃糖蜜はサトウキビやテンサイなどから砂糖を精製したあとの副産物で安く手に入ります。

ボール盤とバイス(万力)、ちょっとどうなのよというくらいに錆びてしまったのがあるので、近いうちに錆取りしてみようと思います。さすがに廃糖蜜を使うのは場所もないので、上記の液体サビおとしを使って、モルタルを練るのに使ったトロ舟で刷毛塗りしてしばらく放置してからやってみようと思っています。

Inkscapeでの部分印刷の方法。

Inkscapeで作成したA0サイズのデザインの一部をA4で印刷したいときの方法のメモ。

ダンボール箱への印刷をデザインするのに、箱自体は試作したのだけれど印刷をどうしようかと思ったときにどうやるんだっけと思ったのがきっかけです。

箱なので六面あるわけですが、印刷デザインは版下1枚なので箱の展開図と同じサイズになります。すると大判プロッタでもなければ印刷できません。でも、それぞれの面の部分がA4に収まるなら分割して印刷すればいいわけです。a
以下の方法ではレイヤーを動かすので、オリジナルファイルで作業するのは危険です。必ず印刷用にコピーするなりして作業します。

  1. 印刷するSVGファイルを開きます。
  2. 「ドキュメントのプロパティ」でサイズをA4にします。すると図面上にA4サイズの枠が出てきます。
  3. 印刷したい部分をその枠の中に移動します。複数のレイヤーに分かれている場合にはレイヤーごと移動します。
    上記の例なら、ダンボール箱の展開図をレイヤー0、印刷の版下をレイヤー1とした場合に、次のようにします。
    1. 印刷用にレイヤーを作成します。印刷レイヤーとします。
    2. レイヤー0でCTRL+Aで全選択、CTRL+Cでコピーし、印刷レイヤーに切り替えてCTRL+ALT+Vで同じ位置に貼り付けます。
    3. レイヤー0を非表示にします。
    4. レイヤー1でも同じことをします。
    5. 印刷レイヤーで全選択して、先ほどのA4枠の中に印刷したい部分を動かします。
  4. プリンタアイコンもしくは印刷メニューから印刷します。
    このとき、もしかしたら正常に印刷できない(プリンタドライバが描画できない)部分があるかもしれません。そのときは印刷したい部分をA4の枠に入れた状態でPDFとして保存します。そしてPDFファイルを印刷します。

.aiファイルをInkscapeで開くときの覚書。

Inkscapeで.aiファイルを開こうとしたら、開けるファイルとだめなファイルがあったので検索しました。

Inkscape edits to an SVG file, which was originally created in Adobe Illustrator, are lost when importing back into AI

That's because Adobe cheats. It creates a valid SVG, but apart from the SVG code it also writes to the file, in encoded binary form, the entire AI-format source file of the image. Inkscape, of course, edits the SVG part of the image and leaves the encoded binary untouched. But when you import the SVG file back to AI, it completely disregards the SVG code with its edits and reads directly from the encoded AI binary. Therefore, any SVG changes are lost. To work around it, in Inkscape open the XML Editor and remove the non-SVG elements (everything not with the svg: prefix in its name, usually towards the end of the tree). If you need to do this job repeatedly you may consider using some XSLT-based automation. Alternatively, when exporting SVG from Illustrator, uncheck the options "Preserve Adobe Illustrator Editing" and "Optimize for Adobe SVG viewer". If you're using an Inkscape version higher than 0.92.3, Inkscape automatically removes the extra data from Adobe upon saving as SVG.

これを翻訳したものが以下です。

Adobe Illustratorで作ったSVGファイルをInkscapeで編集して、それをAIでインポートしたら編集結果が失われた

これはアドビのチートです。AIは有効なSVGファイルを作成するけれど、SVGコード以外の部分にもエンコードされたバイナリの形でAI形式のデータを書き込んでいます。Inkscapeは当然ながらSVGの部分を編集しますが、エンコードされたバイナリ部分には手を触れません。ところがそのSVGファイルをAIにインポートするとき、編集されたSVGコードの部分は完全に無視されてエンコードされたAI形式のバイナリを読み込みます。そのためSVGに加えられた変更は失われます。これを回避するには、InkscapeでXMLエディタを開き、非SVGエレメント部分を削除します(svg:プレフィクスで始まっていないツリーをすべて)。この作業を繰り返す必要がある場合には、XSLTベースの自動化を検討することもあるでしょう。もしもInkscpaeの0.92.3よりも上のバージョンを使っているなら、InkscapeはAdobeのデータをSVG保存時に自動的に削除します。

だそうです。
0.92.3は安定版としてダウンロードできますが、AppVeyorで自動的にビルドされているWindowsバイナリをインストールすれば、SVG保存時に自動的に削除されるようです。

AppVeyorビルドをダウンロードするには、
  1. AppveyorにあるInkscapeのWindowsビルドのリストを参照します。
  2. リストの中で、以下の条件を満たす最新のエントリーを探します:
    • 左型に緑の線があるもの(ビルドが成功したもの)
    • 右側にある名称が 0.92.x-1234 になっているもの(個人的ブランチやマスターではなく、0.92.xブランチ)
  3. その説明部分をクリックします。

  4. "Environment: MSYSTEM=MINGW64" をクリックします。

  5. ダークカラーのターミナルボックスの上の右側にある "Artifacts" をクリックします。

  6. 7zip ファイルをダウンロードします。

  7. 7zアーカイブを展開できるプログラムで展開します。(7zipなど)

  8. Inkscapeフォルダにある inkscape.com をダブルクリックしてInkscapeを起動します。

だそうです。 ちなみに現時点での最新0.92.xは 0.92.x-2328 のようです。ダウンロードしたら inkscape-0.92.3_2018-11-25_5aff6ba-x64.7z というファイル名でした。

ただ、そもそも開けないのはなんでなのかはわかりませんでした。AIのバージョン?

紫外線LED。

UV硬化型レジン。 ではPADICOのUV-LED Smart Light miniを一緒に購入して使っているのですが、
  • タイマーが1分と2分しかない
  • コンパクトだが設置が不安定
ということがあり、もう少し光の強いのを自作するにはどうすればいいか調べてみました。

Yahoo!ショッピングにLEDジェネリックというショップがあり、ここで3WクラスのUV-LEDを扱っているようです。またそのクラスになると放熱も考えなければいけないのですが、面実装LED実装用のアルミ基板と、そのアルミ基板に取り付ける小型ヒートシンクもあるようです。

これに定電流源とタイマー用のPICマイコン、スイッチを組み合わせればわりと簡単にできそうです。

MP4のチャプター名。

MP4ファイルにあとからチャプターを打つ。 では単純に連番でチャプターを打っていました。スクリプトの方もそれしか考えておらず単純にチャプター名は連番にしていたのですが、TMPEGEnc MPEG Smart Renderer 5では(というかおそらく他の編集ソフトでも)チャプターに名前をつけることができるのがわかりました。

たとえばあるビデオでは、導入部 - オープニングテーマ - サブタイトル - Aパート - アイキャッチ - Bパート - エンディングテーマ - 次回予告 などというふうに別れているとき、その説明部分まで含めてチャプターを打つことができるようです。

ちょっと手元のソースで試しにやってみたら、次のような感じになりました。

チャプター名がない場合:
0 300 2100

チャプター名がある場合:
0 300 #Name=オープニングテーマ 2100 #Name=Aパート

そしてそれをエンコード時に合成してやると…なんとVLC Media Playerでは文字化けしてしまいました。一方、MPC BEではちゃんと読めます。
文字エンコーディングの問題かもしれないと思い、チャプターファイルをUTF-8に変えてから再度合成してみます。

今度はVLCでもMPC BEでもちゃんとチャプターリストが日本語で表示されました。どうやらチャプター名はUTF-8でつければいいようです。

ちなみに、手元にあるプレイヤーソフトのCyberlink PowerDVD 17ではこのMP4のチャプターは扱えないらしいことがわかりました。さらにはChromeCastでもチャプタージャンプはできないようです。もしかしてチャプターというのは規格化されていないのでしょうか。

不思議に思ってPowerDVDで市販BDを再生してみると、ちゃんとチャプタージャンプできます。PowerDVDからChromeCastに再生させたらテレビのリモコンからチャプタージャンプできるのか試そうと思ったら、どうやら市販BDはChromeCastへ飛ばせないようです。DLNA(DTCP-IP)とかAACSとかの関係なんでしょうか。

余談ですが、ついでに調べてみたらDLNAは2017年1月5日に解散しているようです。また "ChromeCast DTCP-IP" で検索しても、ピンとくるものはなさそうなので、やっぱりその関係でしょうか。

ともあれ、TMSR5でチャプターの keyframe ファイルを作成したら、それをUTF-8でチャプター名も入った chapter.txt ファイルに変換してやればVLCでもMPC BEでもチャプター名が扱えそうです。

ということで、以前に作ったmakechap.pyを改変中です。

一方で、mp4chapsというツールを見つけました。mp4v2というツール群に入っているそうです。バイナリもあるようですが、リポジトリから最新(といっても2015年のようですが)をダウンロードしてコンパイルするのがいいかと思います。

それからMP4のチャプターファイルについてというページでチャプターファイルの形式について触れられています。
00:00:00.000 チャプター名1
の形式と
CHAPTER01=00:00:00.000
CHAPTER01NAME=チャプター名1
の形式があるようです。

現在のスクリプトは後者の形式で出力するようにしていて、これでちゃんとチャプターが打てているのでこの方向で考えてみます。

USB MIDIインタフェースを買ってみた。

Windows10でMIDIファイルを使う。でMuseScore 2とサウンドフォントを使ってMIDIの曲を演奏するというのをやりましたが、ちょっと興味が出てきたのでUSB MIDIインタフェースを買ってみました。

AmazonにProster USB MIDI ケーブルというのが999円で売っていたのでこれを調達。早速MU-100を引っ張り出してみます。
PC側はWindows 10 Proですがケーブルを挿したら素直に認識されました。そのままMIDI側は、MU-100のMIDI OUT端子にケーブルのMIDI INを、MIDI IN端子にケーブルのMIDI OUTを接続します。

MuseScore 2を起動して設定を開くと、MIDI Inputのところに "MMSyste,USB MIDI Interface" というのがあり、Outputのところでも選択できるようになっていました。


その下に "JACK オーディオサーバー" というのがあるのが気になりますが、とりあえず先に進みます。

ちなみに、MuseScore 2は起動時にMIDI機器をチェックするようで、MIDI Inputを使うためにはMuseScore 2の起動前にMIDI機器の電源を入れておくことが必要なようです。

無事つながって、先日入力したジムノペディも演奏できたので、公開されている他の曲を演奏したらどうなるかな、と探してみました。
MuseScoreのフォーラムには結構たくさんの人がアップロードしていて、ユーザ登録すればダウンロードできるようになっています。

早速 "Zen Zen Zense"(RADWINMPS) をダウンロードしてMuseScore 2で読み込んでみました。

これをMU-100で演奏させてみると…。

まずどうやら公開されている曲はGeneral MIDI 1規格を前提としているようです。一方、YAMAHAのXG規格は音色や楽器のマッピングが違っているところもあるので、GM音源で作られたMIDI楽曲をXG音源で再生すると変な感じになることがあります。
MU-100ではGM互換のTG-300モードというのを持っていて、そのモードに切り替えればなんとか再生はできます。しかしながら、GM1規格はRolandのSC-55mkIIをリファレンスとしているのでその音色を基準にして割り当てられていること、TG-300は音色はSC-55mkIIと異なるものも多いことなどがあって、曲によっては違和感バリバリなものもあります。

それからどうも音符の長さがばらついているようです。Windows上でサウンドフォントを使って再生するとなめらかに再生できるのに、MIDI OUTから出力してMU-100に演奏させると音符の長さが微妙に長かったり短かったり、ウッと詰まってみたり走ってみたりという感じになります。そういえば昔のソフトウェアMIDI音源でもそんなことあったっけとか、MIDI THRU使ってつないでもタイミングが微妙にずれたりしたっけとか思いだしたり。

ちなみにこのギクシャク感は、MIDI Outputのディレイ設定を5ミリ秒とか10ミリ秒とかにしてやるとなめらかになります。チャンネル(楽器)数が多くなってきたらもう少し増やしたほうがいいかもしれません。

キーボードは持っていないしそもそも弾けないので、入力は試していません。VL-70m+WX11で入力できないかしら。

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...