無機野

ここはお前の日記帳

windows10起動時に(winの機能である)仮想デスクトップを追加した上で特定のソフトウェアを実行したりする的なやつ

oshiete.goo.ne.jp
このリンク先の質問主がやりたいっぽいことをやる
といってもやることはvdeskを使うだけ
このvdeskというのはwinの機能である仮想デスクトップをコマンドラインから使うためのアレである

chocolateyにあるので使用者はcinst vdesk -y でインストールされる
readme見ればわかる通り
vdesk create[:n]
vdesk [on:] [noswitch:{true|false}] [args]
というコマンドが使えるみたい

例えば2枚めの仮想デスクトップでchrome起動したければ
vdesk create:2
vdesk on:2 noswitch:true run:"chrome.lnk"
みたいな感じでいけるとおもう
PC起動時にこれを実行したければスタートアップフォルダに放り込んでおけばおk

余談、俺はalt + tabと共にwin + tabを多様してるからこそこのvdeskがありがたいけど一体winユーザ全体の何%がそもそもこの仮想デスクトップ機能を知っているのだろう…

KZ AS06買うた(イヤホン)

www.amazon.co.jp
これ買うた
直近ではATH-LS50を使っていて、それもまあ悪くないイヤンホホだったが断線したので買い替え
リケーブルすればまだ使えたが単純に新しいのが欲しかったのと、あとLS50が俺の耳に合わなかったのか遮音性がこのタイプにしては微妙で、かつ1時間も付けてると耳が痛くなっていた
LS50の前は名機SE215を使っていて、それを紛失したのでつなぎとしてのLS50であったが、またSE215を買うのもな、と思いながら調べていたら最近の中華は性能いいみたいな話を見たので、思い切って購入
f:id:moppii:20190129232243j:plain
こんなん
装着感は当然人によるが自分にとってはとてもよく、LS50よりは疲れない(が、SE215のほうが軽さはあった)
3BAで低音どうなんよと思っていたがちゃんとなってくれる なりすぎて邪魔ということもない
自分はメタルなんかもよく聴くけどそういう時は再生機側でちょっとだけ低音あげてやるとちょうどいいかも
というか解像度自体はLS50より明らかに良い SE215ともかなりいい勝負だと思う(先も言ったようにSE215は紛失して手元にないので曖昧)
耳に引っ掛けるところが(ぐにゃぐにゃのLS50と違って)適度に形状記憶されてる&本体とケーブルの接続が2ピンなので本体が独立にくるくる回転しない(伝われ)
ので左右の判別がすぐわかる(LS50ではどっちがLでどっちがRか毎回迷っていた)

総合するととても良いので良いと思う(コナミ

バッチファイルつくってffmpegの処理をD&Dで一括処理するみたいな

動機:複数のhoge.wavをhoge.m4aに変換したい
その場合コマンドラインで指定するよりバッチファイル作っておいて複数選択したwavファイルをドラッグアンドドロップしたほうが楽っぽい

手段:

@echo off
for %%a in (%*) do (
ffmpeg -i %%a -b:a 128k %%a.m4a
)

をメモ帳とかで保存して拡張子を.batにしてそのバッチファイルを目的のファイルのあるフォルダに移してD&D

結論:コマンドプロンプトのfor構文よくわからなくて、変数は %%[任意の文字] のように指定するらしい
そんで-b:a 128k は固定ビットレート128kbpsの指定 このへんは適当
あとこの書き方だと最終的に生成されるファイル名がhoge.wav.m4aになってもんにょりするけどこの中途半端なwavの削り方はよくわからんかった
というかもう目的のブツは完成しているので体裁整えるために試行錯誤する労力と見合ってないというか

余談:少し前のffmpegのデフォのaacエンコーダは評価散々だったらしいけど最近はそうでもないらしい よくわからん

intel hd graphicsのドライバの更新した

vivaldiでyoutubeなどの動画を再生するときに緑に暗転する問題があり、(おそらくchromium系のブラウザ全体の問題ではあるが)、hd gtraphicsのバグか相性問題かわからないがとりあえず試みとしてドライバの更新くらいはしとこうというのがそもそもの動機

intel製品のドライバを更新したい時、インテル® Driver & Support Assistantを使うのが一応正規ルートっぽく、インストールしてみたはいいもののエラーが発生してインストールできない
(スクショとるの忘れた)

ので個別でドライバ更新の実行ファイルDLしてきてインストールを試みるもそれもできない、こんなかんじ↓
f:id:moppii:20181203050430p:plain

ググってみたところ実行ファイル内のinfファイルを個別でアレすればアレできる的なアレが見られたのでやってみる
ここから実行ファイルをDL、その実行ファイルを7zipなどで実行せず解凍しておく
バイスマネージャー開いて件のドライバの更新を選択し、[ドライバをオンラインで検索]と[コンピュータを参照してドライバーソフトウェアを検索]の二択なので後者選んで解凍しておいたフォルダを指定したら正常にインストール成功

今の所動画再生して暗転はしてない
余談だけどhd graphicsはもちろんバリバリにゲームを動かせるような製品ではないがそれでも個別ゲームへの最適化みたいなことをしてくれていて、そのためにゲームする人ならドライバの更新はこまめにチェックしておいたほうが良い
俺はゲームしないからどれくらい改善するものなのかよく知らないけど
例えば今回インストールしたバージョンでは以下のゲームがサポートされている
フォールアウト 4*
ファークライ 5*
FIFA ワールドカップ 18*
Paladins*
流浪の道*
シムズ 4*
強打*
国境地帯 2*
ユーロトラックシミュレータ 2*
PLAYERUNKNOWN の戦場*
ロケットリーグ*
ウィッチャー 3*
ところでインテル公式なのに文章が英語を機械翻訳しましたみたいな日本語で不穏

buffalo ramdiskユーティリティに気をつけろ

結論:win10ではbuffalo ramdiskユーティリティを使わないように
buffalo.jp

まだwin10の出てない頃、つまりまだHDDが主流だった頃にブラウザの実行環境をRAM領域に移すと爆速になるぞみたいなブームが一時期あって、久しぶりにそれをやろうとしたらえれー目にあったという話

RAM領域に移すには当然ドライブ割り振らないといけなくて、そのためのソフトのひとつが上記のbuffaloのやつなんだけど、俺の環境(lenovoのmiix720 win10)でそれをやろうとインストールして再起動したら死んで、UEFI経由で自動修復も復元ポイントも実行するも効かなくて、結局セーフモードで入って該当ソフトアンイストールしたら戻ってこれた
以前別環境で普通に使えてた記憶を頼りに下調べせず適当にやったのが敗因
教訓→ググろう

おわり

追記:QILING disk master freeなら使えた

ソローモデルの各パラメーターをいじった時にどうなるか的なやつ

労働節約的なコブダグラス型生産関数:F(K,AL)=(K^a) * (AL)^(1-a)
資本蓄積式は⊿K=sY-δK
政府や海外は存在しない
プログラミングでは微分を扱えない(ことはないだろうけど簡単のため)差分を扱うことに注意すると

# -*- coding: utf-8 -*-
    
import numpy as np
import matplotlib.pyplot as plt

time = 100 #何期までやるか

Y = np.zeros(time) #空き配列の作成
K = np.zeros(time)
L = np.zeros(time)
A = np.zeros(time)
y = np.zeros(time)
k = np.zeros(time)

K[0] = 10 #初期の水準
A[0] = 5
L[0] = 10

a = 0.5 #コブダグラス型生産関数の資本分配率
d = 0.2 #資本減耗率。減価償却率と読み替えても良いかもしれない
s = 0.2 #貯蓄率
g = 0.02 #技術進歩率
n = 0.02 #人口成長率

for t in range(time-1):
    Y[t] = (K[t]**a)*((A[t]*L[t])**(1-a)) #コブダグラス型生産関数
    K[t+1] = s*Y[t] + (1-d)*K[t] #資本蓄積式
    A[t+1] = (1+g)*A[t] #技術進歩
    L[t+1] = (1+n)*L[t] #人口成長
    y[t] = Y[t] / (A[t]*L[t]) #効率労働あたりGDP
    k[t] = K[t] / (A[t]*L[t]) #効率労働あたり資本

plt.subplot(2,2,1) #(縦分割数、横分割数、ポジション)
plt.plot(y,"red")
plt.plot(k,"green")

plt.subplot(2,2,2)
plt.plot(Y,"red")
plt.plot(K,"green")

plt.subplot(2,2,3)
plt.plot(A,"red")
plt.plot(L,"blue")

f:id:moppii:20181023204109p:plain

左上のグラフは効率労働あたりのGDPと資本、右上のグラフは経済全体のGDPと資本
人口成長と技術進歩の天井がないa_{t+1} = (1+n)a_t
ので当然の帰結として経済全体も際限なく成長していく
ただ効率労働あたりの数字は早い段階(25期目あたり)で収束しているのが分かる
このパラメータをいじってみる

定常状態では⊿k=0のため、k*とy*は(生産関数と資本蓄積式を連立して)
 \displaystyle k^*={s/(n+g+δ)}^{1/(1-a)}
 \displaystyle y^*={s/(n+g+δ)}^{a/(1-a)}
と解ける
見て分かる通り、sの上昇、またはnとgとδの減少はkとyの上昇につながる
逆も然り
これを見てみる

# -*- coding: utf-8 -*-
    
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as ani

time = 100 #何期までやるか

Y = np.zeros(time) #空き配列の作成
K = np.zeros(time)
L = np.zeros(time)
A = np.zeros(time)
y = np.zeros(time)
k = np.zeros(time)

K[0] = 10 #初期の水準
A[0] = 5
L[0] = 10

a = 0.5 #コブダグラス型生産関数の資本分配率
d = 0.1 #資本減耗率。(財が1つしかないので)減価償却率と読み替えても良い
s = 0.1 #貯蓄率
g = 0.01 #技術進歩率
n = 0.01 #人口成長率

def solow(a,d,s,g,n):
    for t in range(time-1):
        Y[t] = (K[t]**a)*((A[t]*L[t])**(1-a)) #コブダグラス型生産関数
        K[t+1] = s*Y[t] + (1-d)*K[t] #資本蓄積式
        A[t+1] = (1+g)*A[t] #技術進歩
        L[t+1] = (1+n)*L[t] #人口成長
        y[t] = Y[t] / (A[t]*L[t]) #効率労働あたりGDP
        k[t] = K[t] / (A[t]*L[t]) #効率労働あたり資本

fig = plt.figure()
imgset = []

for i in range(10):
    new = s + i/10
    solow(a,d,new,g,n)
    imgk, = plt.plot(k,color="red") #変数のあとに,つけること
    imgy, = plt.plot(y,color="blue")
    imgset.append([imgk,imgy])
    
animation = ani.ArtistAnimation(fig,imgset)
plt.show()
animation.save("solow_s_yk.mp4", writer="ffmpeg")
#animation.save("solow_s_yk.gif", writer="imagemagick")

gifで保存するなら要imagemagick、mp4で保存するなら要ffmpeg
vimeo.com
↑こんなかんじ、sの上昇とともに効率労働あたりのGDPと資本が底上げされてるのがわかる
vimeo.com
↑こちらはsの上昇による経済全体への影響
以下同様に他のパラメータも動かしてみる

for i in range(10):
    new = d + i/50 #資本減耗率0.1から0.02刻み
    solow(a,new,s,g,n)
    imgk, = plt.plot(k,color="red")
    imgy, = plt.plot(y,color="blue")
    imgset.append([imgk,imgy])
animation = ani.ArtistAnimation(fig,imgset)
plt.show()
animation.save("solow_d_yk.mp4", writer="ffmpeg")
#animation.save("solow_s_yk.gif", writer="imagemagick")

vimeo.com
↑資本減耗率を0.1から0.02刻みで増やしていった場合のyとk
減耗率が高いと資本が減耗(減少)していく様が見て取れる
vimeo.com
↑経済全体でも同様

for i in range(30):
    new = n + i/1000
    solow(a,d,s,g,new)
    imgk, = plt.plot(Y,color="red")
    imgy, = plt.plot(K,color="blue")
    imgset.append([imgk,imgy])
animation = ani.ArtistAnimation(fig,imgset)
plt.show()
animation.save("solow_n_yk.mp4", writer="ffmpeg")

↑人口成長率を0.01から0.001刻みで0.04まで(人口が成長していくのではなく人口成長率そのものが変化していることに注意)
vimeo.com
↑経済全体では急激に(指数的に)成長しているのがわかる、が
↓効率労働単位では逆に減少している(効率労働あたりのGDP資本の成長率<人口成長率 なので)
もちろん人口成長率は技術進歩率に読み替えても同じ
vimeo.com

ところでspyderだとmatplotlib.animationがデフォで動かないので以下参照
python - Animation from matplotlib not working in spyder - Stack Overflow

youtube-dlでDL済み動画を回避しつつ動画を音声データにするっていうやつを自動実行するやつ

最近流行ってるVtuberというジャンルをよく見ている オタクなので
で、これがけっこうお歌うまうま勢が多い
オフライン環境でも快適に聴きたい、できれば面倒くしたくない、そんなtips

諸々の導入

pythonのインストール
おすすめはanacondaだけどyoutube-dlしか使わないのなら単体で適当にアレすればよいのではないでしょうか
macだとデフォで入ってたはず

youtube-dlのインストール
cmd開いてpip install youtube-dl
だと思うたぶん

ffmpegのインストール
これないと動画から音声を剥がせない たぶん
パス通ってるとこに置いとけばいいのかな よく分からん

atomic parslayのインストール
DLした音声にサムネとかタグとかいじるのに必要
使わないなら要らん
chocolatey使ってるならcinst atomicparsley

youtube-dlを使ってみる

ドス窓開いてyoutube-dl url
で大体の動画サイトはいける
もちろんurlはプレイリストでも可

youtube-dl -i -x url
で音声のみ剥がせる
iはエラー無視するおまじない
ただこのままだとopusまたはoggファイルが出力される

音質を考える

ただ動画を音声にするだけだと変換時の音質が気になる
まあyoutubeにアップされてる時点ですべて圧縮されてるのであまり拘っても仕方ないが…ベストはつくしたい所
例として以下の動画を考える
www.youtube.com
右クリックから統計情報を見ると
f:id:moppii:20180921011809p:plain
opus(251)というフォーマットであることが分かる
Youtubeで動画に使用されているコーデック(映像・音声それぞれ)の判別をする方法 - Yuichiro_S の Twitterでは文字数が足りないもの
を参考にするとopusの160kbpsらしい opusのことよく知らんけど携帯機で聴くには妥当な圧縮率だと思う
ただopusやoggスマホでは再生しづらいのですべてaacに変換してしまう

youtube-dl -f bestaudio https://www.youtube.com/watch?v=ZtTQ_pI-cCw
でDLすると映像なしのwebmがDLされる
mediainfoで確認するとやはり音声はopusであったがなぜかビットレートは表示されない
ファイルが237秒 3857KBなので3857*8/237≒130で128kbpsくらい?アレ?160kbpsじゃないのおかしくね?

まあいいや…結局aacにするので拡張子を指定すると
youtube-dl -f bestaudio[ext=m4a] https://www.youtube.com/watch?v=ZtTQ_pI-cCw
でDLされるファイルを確認すると126kbpsとなる
ファイルサイズは3.72MB
変な変換してファイルサイズが無駄にでかくなるとかもないのでこれで妥当っぽい

サムネとタグを付ける

youtube-dl -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata "url"
これでサムネとタグが仕込まれる
先述の通りatomic parsleyとかいうよくわからんアレが入ってないとエラーが出るので注意

DL済み動画を回避する

youtube-dl --download-archive ほげほげ.txt "url"
というオプションでほげほげ.txtに保存済み動画がリストされる
つまり毎回同じプレイリストを指定しても保存済みは回避してDLできる
というわけで
youtube-dl --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata "DLしたいプレイリストのurl"
あたりが妥当ではないでしょうか
リストを開くと
動画サイト 動画ID
みたいな感じで羅列されていく
例:
f:id:moppii:20180921032039p:plain

DLするプレイリストをまとめる

毎回URLを指定するのはクソ面倒なのでリストにまとめておきましょう
youtube-dl -a ふがふが.txt
でtxt内のurlが一度にDLされます
つまり追ってるチャンネルの再生リストのURLをテキストファイルにまとめてパス通ってるとこに置いておいてこのコマンド指定すればOK
youtube-dl -i --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata -a ふがふが.txt
たまに何故かDLできない動画があるので-iは入れといたほうがいい

batファイルに書いておく

notepad開いて
youtube-dl -i --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata -a ふがふが.txt
保存して拡張子を.batにすればクリックひとつで実行される
必要なら最初の行でディレクトリを変更しておく

まとめ

ふがふが.txtにDLしたいプレイリストのurlを羅列しておく
それをcmdを実行する場所に置いておく
cd 適当なディレクト
youtube-dl -i --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata -a ふがふが.txt
をbatファイルにしておいて定期的に実行する

これでDLできない動画は知らん

追記:
youtube-dl最新版使ってもDLできないやつあったので以下参考に修正版のアレをpipでアレしたらDLできるようになった
https://github.com/rg3/youtube-dl/issues/17457
個別にインストールしなくても最新版に反映されてるはずじゃ・・・?よくわかんね