環境変数Pathの要素を1つ削除するスクリプト

前回Pathに追記するスクリプトを書いたので今回は要素を1つ削除するスクリプトを書いてみた。

大まかな流れとしては、

今Pathに登録されている要素を、番号を付けてすべて表示
↓
数字を入力する
要素に対応しない数字や文字を入力するとキャンセルされる
↓
入力された数字に対応する要素を削除

といった感じ。

$list[入力した数字]以外の$listにある要素を、セミコロンを足しながらすべて結合してsetxで登録する。

使用例としてはこんな感じ。

PS D:\> RemovePath
------------------------------------------------------------
0        C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
1        C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
2        C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin
------------------------------------------------------------
input number:1
成功: 指定した値は保存されました。

ちなみに、これを実行した後、今開いているPowerShellを再起動しないと変更が反映されない。
なので、

$env:Path -= "消す要素"

スクリプトに追加すると再起動しなくても済むようになるかもしれない。


これも前回同様もし使う場合は自己責任でお願いします。

環境変数(Path)に追記するスクリプト

PowerShellからユーザー環境変数Pathに追記するスクリプトを書いてみた。プロファイルに書き加えたかったので関数にした。

使い方

addpath 追加したいパス

成功すると

path length: (元からあったPathの長さ) + (今追記したPathの長さ)

成功: 指定した値は保存されました。

みたいな感じになる。

ユーザー環境変数Pathの値を取得して引数とくっつけてsetx*1で登録する。
setxはなぜか1024字より大きい値を登録しようとすると1024字に切り捨ててしまうので注意。

もしこれを使う場合は自己責任でお願いします。

環境変数(Path)をほんのちょっとだけ見やすくする

コントロールパネルから環境変数を編集するとき、編集ウィンドウがアレすぎて見づらいことこの上ない。特にPathなんかはたくさん通すと編集するのがツラくてしょうがない。
PowerShell上では少し見やすくはなるけれども、一つの変数に対して値が改行なしで出力されるのでまだ少し見づらい。
ということで、ここではPathについて

$env:Path.split(";")

とやるとセミコロンで改行して出力することができる。

$env:Pathで登録されているPathが文字列として返ってくるので、それをsplit(";")でセミコロンで区切る。最終的には配列を返す。
配列の表示は1要素1行なので問題ない。たぶん。


また、プロファイルに

function ViewPath{
    return $env:Path.split(";")
}

のように関数として書いてもいいかもしれない。

PowerShellで色付きlsをつくる

なんとなくPowerShellで遊んでみようかなと思ったのでlsに色を付けてみた。以下のコードをプロファイルに追加して再読み込みすると動く。

先頭2行のコメントアウトを外すとmyslのエイリアスにlsを設定することができる。エイリアスの上書きはどうやらできないみたいだ。
また、エイリアスを設定せずにmylsと打つほかに

ls | lsColor

でも動く。

上のコードではディレクトリを緑色に、exeファイルを黄色に設定した。


ただこれをmeasure-commandで測ってみると普通のlsより10倍ほど遅い。まあ使い分ければいいのかしら……

移流方程式とかCIP法とかのメモ

CIP法についてふれたのでメモ程度にまとめてみる。

移流方程式は、cを伝播速度(ここではとりあえず一定)とすると、

\frac{\partial f}{\partial t}+c\frac{\partial f}{\partial x}=0

で表される。
元の関数fの空間微分

g=\frac{\partial f}{\partial x}

に対する移流方程式を考えると、

\frac{\partial g}{\partial t}+c\frac{\partial g}{\partial x}=0

と表すことができる。この微分方程式をコンピュータで解いてやると、割と良い結果が得られる。

時刻nでの x_{i} , x_{i-1} 間のプロファイルを

F^{n}_{i}(x)=a_{i}(x-x_{i})^{3}+b_{i}(x-x_{i})^{2}+c_{i}(x-x_{i})+d_{i}

としてやるといい感じになる。
また、有理関数を使うと、

F^{n}_{i}(x)=\frac{b_{i}(x-x_{i})^{2}+c_{i}(x-x_{i})+d_{i}}{1+B(x-x_{i})}

aとかbとかcとかdとかBとかは条件を入れて計算する。
有理関数を使った方が精度が良い。

ちなみに移流方程式の風上差分近似のプロファイルは

F^{n}_{i}(x)=\frac{f^{n}_{i}-f^{n}_{i-1}}{\Delta x}(x-x_{i})+f^{n}_{i}

となる。
小文字のfはすでに分かっている値。


・・・でいいのかな。次はプログラムにしてみよう。


CIP法 - Wikipedia

Tkinterで簡易アニメ

Tkinterでグラフのアニメーションをやってみたい、ということでとりあえずアニメーションだけやってみた。

これを実行すると、円が画面左端から右に向かってずずずっと動いていくアニメーションが表示される。
0.1秒間隔でupdateを行うことで再描画する。sleepを入れないとものすごい速さで描画が終わってしまう。また、新たに円を作る前にdeleteで前の円を消さないと、すべての円が表示されてしまう。こんな感じ。


create_ovalで円を作る際、タグを設定することができる。複数の図形に対しても同じタグを設定することができるので、deleteするときにそのタグを指定してやるとまとめて図形を消すことができる。
if文の中にdeleteを入れているのはループが最後まで回った後に図形を消さないようにするため。

終了するときは×ボタンで。

画面全体を消去ってできないのかしら……