パスワードを忘れた? アカウント作成

espyさんのトモダチの日記みんなの日記も見てね。 過去1週間(やそれより前)のストーリは、ストーリアーカイブで確認できますよ。

14178068 journal
日記

espyの日記: Elixir でプログラミング 3

日記 by espy

Elixir 初プログラミング。

  抵抗分圧回路

  Vin ───┐          
       □ R1        
       │          
       ├───→ Vout  
       │         
       □ R2       
       │         
        GND

  にて、 Vout = Vin * R2 / (R1+R2) なのであるが、 Vin, Vout を指定して、
  目的の Voutが得られる抵抗 R1,R2の組み合わせをE24系列から選定するプログラムを
  作った。

# volt_divider.exs --- search proper R1,R2 combination of voltage divider circuit
#
#  usage: elixir volt_divider.exs <Vin> <Vout>
#            Vin, Vout : float
#
 
e24 = [1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1]
e24resisters = e24 ++ (for x &lt;- e24, do: x*10)
 
vin = String.to_float(hd(System.argv))
vout = String.to_float(hd(tl(System.argv)))
 
result_sorted = (for r1 <- e24resisters, r2 <- e24resisters, do: [ abs(vout - vin * r2/(r1+r2)), vin * r2/(r1+r2), r1, r2 ] )
               |> Enum.sort
 
for j <- 0..4 do
  [ err, vout, r1, r2 ] = Enum.at(result_sorted, j)
  IO.write("R1 = ")
  IO.write(r1)
  IO.write(",\tR2 = ")
  IO.write(r2)
  IO.write(",\tVout = ")
  IO.write(vout)
  IO.write(",\terror = ")
  IO.puts(err)
end

実行例:

D:\Usr\Elixir>elixir volt_divider.exs  5.0 3.3
R1 = 4.7,       R2 = 9.1,       Vout = 3.2971014492753623,      error = 0.0028985507246375164
R1 = 47.0,      R2 = 91.0,      Vout = 3.2971014492753623,      error = 0.0028985507246375164
R1 = 6.2,       R2 = 12.0,      Vout = 3.296703296703297,       error = 0.003296703296702841
R1 = 2.0,       R2 = 3.9,       Vout = 3.3050847457627115,      error = 0.005084745762711673
R1 = 20.0,      R2 = 39.0,      Vout = 3.305084745762712,       error = 0.005084745762712117
 
D:\Usr\Elixir>

# スラド日記で使えるタグ一覧は今どこにある?? code, pre, blockquoteどれも
# 「<-」 がコメントの始まりになってしまう... 「&lt;-」 と手動で直すしかなかった..

# (5/7追記) コメント頂いた、ecodeタグでうまくいきました。

14041978 journal
日記

espyの日記: メインPCを新しいものに更新。 6

日記 by espy

前回、2014年からもう5年。
メインで使っていたデスクトップPC、通電したまま寝落ちして、起きたら画面が表示していない。パワーキー長押しで一度切って再起動したらBIOSビープ音「ピー・ピピピ」またしてもVGAエラーか?

その後、本体を冷まして再度パワーオンしたら、普通にWindows7も立ち上がって数時間使えたりもするが、何か負荷の高いアプリを使うなどすると、やはり画面が突如真っ暗になる現象、NumロックキーでキーボードのLEDが変わるので、CPUは死んでないらしいが、シャットダウンせざるを得ない。
もう寿命という所だろうか。マザーボードは2008年からずっと使ってたP5K-E、Win7 32bitでそろそろ使えないアプリも増えてきたしで、本体を更新することにする。

また新しいマザーボード等、一式を買い揃えて…というのは、今回はやらない。
2017年1月に出来心でHoloLensを買ったあとで、開発環境のunityは64bit環境が必要と知って買った、GIGABYTE のBRIX、GB-BKi7HA-7500-BWを、OSやunityをインストール後にそのまま放置していた。これを液晶ディスプレイ(2016年購入)の背面にVESAマウントで取り付けて終わり、にしようと、地層の下の方から取り出して準備を始めた。

ストレージが M.2 の1TBだけで、旧マシンのドライブの全内容をコピーして持ってくるにはとても足りないので、お値段はべらぼうだがここは 2.5" 4TB SSD を追加してやろうと、ウエデジのWDS400T2B0A、約6万を購入。これでストレージは合計5TBだ。

旧マシンがまだ起動できる状況で、ディスクの必要なファイルをLAN経由で何日もかけて徐々にBRIXの方へコピーし、今は無事、BRIXを使える状態にできている。

前回もやったのでベンチマーク…タイムリープベンチは83で、前回のファンレスGeForceよりも速い?! ゆめりあベンチは動作せず。

使用上の問題は、液晶ディスプレイ背面に取り付けてあるので、電源を入れるときにいちいち後ろに手を伸ばさねばならなくて面倒なこと。BIOSの設定で USB S5 WakeupをEnableにして、キーボードを叩いてパワーオンさせようとしているが、起動したりしなかったりで、なんかうまく動いてくれない。キーボードはUSBハブ経由接続しているのが原因だろうか?

13738714 journal
日記

espyの日記: 若おかみは小学生! (映画)

日記 by espy

すごく良かった。
ポスターの絵柄がキッズアニメ風なので、それだけで避けられている層がきっとあると思うけど、数年前まではあった、毎夏のジブリの新作を観ていたようなアニメ映画ファンならば観ておいて損はない。お薦め。
テレビアニメを観て予習をする必要はない。ストーリー上でとんでもなく重い話が出てくるが、泣きで引っ張るような所は無く、悪人は出てこないし、嫌みなライバルも最後は協力してくれるプロフェッショナルで、エンディングは爽やか。
パンフレットも情報量が多くてグッド。

13683930 journal
日記

espyの日記: 最近観た映画、私的採点

日記 by espy

異論は認める。

バーフバリ 王の凱旋 90点 「たくましく成長した!」
未来のミライ 70点 「ひぃ爺い」
リズと青い鳥 70点 「ハグして」
カメラを止めるな 82点 「ポンッ!」
ペンギン・ハイウェイ 75点 「おっぱい」

(DVDで観たもの)
エクス・マキナ 65点 「チューリングテスト」

ネタバレは避けつつ...
バーフバリはストーリーも映像も引き込まれる、映画らしく楽しめる映画。
リズと…は、繊細でクオリティが大変高いのは認めるけど、ほとんど高校の校内という絵が地味な感じ。
未来のミライとペンギン…は、テーマ的には全然違うけれど、どちらも不思議な事が起きるファンタジーという点、そのファンタジーなシーンや展開に唐突な感じがあって、納得感はいまひとつというか。どうせハッチャケているならペンギンの方が思い切りが良くて映像は楽しめる。登場人物が理科系っぽいのもいい。
カメラを止めるな…これはチープな作りなのに巧みなアイデアと、最後に全部歯車が噛み合って、かつ笑えてハッピーエンドという、アツアツポイントの多いとんでもない作品だった。

エクス・マキナは公開当時観ようと思って逃した物が、DVDが安く売られてたので購入。擬人化されたAIが、本当にヒトの様に考えているのか…という、よくあるテーマ。意外な展開といったギミックはあまり無い。

13494895 journal
日記

espyの日記: 謹賀新年。

日記 by espy

今年もよろしくお願いします。
初詣、今年は成田山ではなく実家近所の神社で。おみくじは私も父も吉でした。

年賀状メイキングのページ goo.gl/RETr4R
今回は初めてメタセコイア & ペパクラデザイナーを使いました。

13488237 journal
日記

espyの日記: まだ使えるGrace

日記 by espy

TIのマイコン、MSP430 で、サポートの終わっている、コード自動生成ツール Graceが、まだ有効に使えたよ、というノウハウをブログに書いた。

http://espilab.ddo.jp/wp/?p=508
20ピンのMSP430マイコンを楽に使おう

http://espilab.ddo.jp/wp/?p=513
まだ使える Grace

13457422 journal
プログラミング

espyの日記: C言語のwhile () の条件式にデクリメントで はまった。 6

日記 by espy

もう何ヶ月、何年ぶりか?の書き込み。

趣味的な 16bitマイコンのプログラムで、こんな感じのコードを書いていた:
(簡略化している)

unsigned int tmout = 50000;
while (tmout--){
    if (I2CTxComplete){
        ret = txlen;
        break;
    }
}
if (tmout == 0){
  ret = E_TMOUT;
  if (UCB0STAT & UCB0BUSY) ret = E_BUSY;
  if (UCB0STAT & UCB0NACK) ret = E_NACK;
}
retrun ret;

これはI2Cの送信の関数を抜けるあたりのコードで、送信完了を待って、普通に完了したら送信したバイト数(txlen)を返し、タイムアウトになったらエラーコードを返す(E_BUSYなどは負の値)という仕掛けにした。50000回もステータスを待って完了(I2CTxComplete)しなければ異状ありとみなして、次の if (tmout ==0) で引っかかると思ったが、実際は引っかからなかった。
ブレークポイントを張って、エラー時の tmoutの値を見ると、0xFFFF…あれれ、なんで?

もしや、と思って、cygwin上でこんなプログラムで実験してみると

    j=10;
    while (j--){
        printf("%d ",j);
    }
    printf(" j=%d\n", j);

    j=10;
    while (--j){
        printf("%d ",j);
    }
    printf(" j=%d\n", j);

すると出力は、

$ ./test-while
9 8 7 6 5 4 3 2 1 0 j=-1
9 8 7 6 5 4 3 2 1 j=0

ループを抜けたら j=-1、えーそうなのかー...

コンパイルで、アセンブラソースを出力させて中味を確認してまでやって、ようやく理解した。

while (j--) { 中味; } だと、jの値を評価し、中味を実行するか判定した後で 変数jの値を減らす。(そして判定が真なら中味を実行する)
while (--j) { 中味; } では、変数jを減らしてから jの値を評価し、中味を実行するか決める。

よくよく考えれば、 if ( ) の条件式で単項演算子を使う時は注意だよ、という、ふつーに教科書に載ってる話と全く同じ話なのに、while (条件式) ではカッコ内を処理してから…と思い込んでしまった。単にそれだけの事。

typodupeerror

「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」

読み込み中...