トップ «前の日記(19-October-2020) 最新 次の日記(21-October-2020)» 編集

つれづれなるままに

これまでの訪問者人
本日の訪問者人  昨日の訪問者人
月齢20.7

AI | AIきりたん | Ast | Beat Saber | CeVIO | Cn | cover | de | Emacs | En | Es | fr | git | html | iPad | It | Just Dance | misc | MMD | MV | NEUTRINO | OVA | PC | PV | Ru | SF | SKK | stable diffusion | SynthesizerV | tDiary | Th | Vocaloid | VRC | VRChat MMD | Vsinger | Vtuber | was | YuNi | お茶 | アニメ | アメリカ | イラスト | オカリナ | カゲプロ | キズナアイ | テレビ | ノベル | ノーベル賞 | ビートセイバー | フィートセイバー | フランス | ラズパイ | ラノベ | 万葉語 | 世界 | 中国 | 予定 | 即売会 | 台湾 | 台風 | 合成してみた | 同人 | 地震 | 宇宙 | 家電 | 展示 | 描いてみた | 政治 | 旅行 | 日記 | 映画 | 時事 | 書道 | 歌ってみた | 歴史 | 海外 | 演奏してみた | 漫画 | 特撮 | 科学 | 英国 | 訃報 | 語学 | 踊ってみた | 陶笛 | 障害 | 音楽 | 飲み |

20-October-2020 ねつ [長年日記]

_ [アニメ] シグルドリーヴァ

ほっこりすることもあれば別れもある、と。

死神と言われて悲劇に浸っていたクラウディアですが、チームのみんなは以前からいつも仲間を見送っていた。ワルキューレに見送られれば死後にやすらかにいられると信じることで死地に赴く勇気を得ている基地の隊員だちを。

ところで、このOPってナナオアカリなんですよね。

_ [予定][アニメ] 月が導く異世界道中

まさかのアニメ化です。

なろう発で、コミカライズも大人気の作品が来年TVアニメとして放映されるようです。

特設サイトにあった原作のイラストとコミカライズのイラストを見ると、どうもこの手の作品ではめずらしく、コミカライズ版の方にデザインが近いようです。

それはそれで納得なのですが。この作品のコミカライズは原作と漫画の幸せな組み合わせだと言われていたり。

かく言う私もアルファポリスのサイトで連載されているこのコミカライズのファンだったり。連載開始のころから読んでるから、感動ひとしお。

_ [cover][Vocaloid][de] 『狐の森』Forest of the Fox【GERMAN COVER】

Kasuka による 狐の森 のドイツ語歌詞カヴァー。

ゆったりとしっとりとした曲だなと思いましたが、原曲も結構そういう感じの曲だったのですね。

[初音ミク] 狐の森 -湊いつき (The forest of fox / Miku Hatsune / Minato Itsuki)

_ [Vtuber][cover] 夕凪、慕情 - 碧海祐人 / Covered by 理芽 / RIM 【歌ってみた】

神椿の理芽のカヴァー。

淡々と語りかけるような歌ですね。

_ [Vtuber] 道明寺ここあ とギター

久しぶりにギター演奏の配信のを見たのですが、はじめてから2、3カ月しかたってないのに、かなりしっかりと弾けるようになっていましたね。

ギターって上達しやすいのかなぁ。と言うと連れにそんなもんじゃないよ、と言われてしまいそうですが。

でもバンドのって大抵そんなに時間かけずに上達してる人がいる気がするのですが。

高校に入ってからはじめてる人って結構いると思いますが。

漫画だと実は上達するまでの期間がまるっと飛ばされてるだけというのはあるかもしれませんが………。

まぁ、少なくともかなり練習したのは確かなのでしょう。

歌でとちるところで同時に演奏の方も止まったりしてるので、本人が弾いてるのは間違いないと思うのですがね。

配信のしゃべりもかなりこなれてきてるな。

しばらく配信とか見れなかったからなぁ。

_ [Vtuber] アズリム 100日後にトイレットペーパーを買える女の子

なんというか。。。

_ [PC] Fortran と C のインタフェース

この話題やると来てくれる人が減りそうだけど、まぁ、今はちょうど減ってるときだから、とやってみたり。

あんまり書かれてるところがないのですが、Fortran 2003 からはCとのインタフェースの規格が標準になってるのですね。

実のところ2003年の規格だから知れわたっていてもおかしくないのに資料が全然なくて色々と苦しめられてる人がいたはず。

それだけFortran人口が少ないのだということなのかもしれませんが。

Fortran の iso_c_bindings という module と bind(c) という宣言を組み合わせてやるのでした。

例を示しましょう。

まずは型の宣言をFortran で。

$ cat binds.f03
module binds
       use iso_c_binding
       implicit none
       type,bind(c)::test_t
               integer(c_int)::a
               real(c_double)::b
       end type
       type(test_t),bind(c)::test
end module binds

Fortran のメインをこんな感じに。

$ cat main.f03
program main
       use iso_c_binding
       use binds,only: test
       implicit none
       integer(c_int)::c
       interface
              subroutine cfunc() bind(c)
              end subroutine
       end interface

       test%a=15
       test%b=1.5d2
       call cfunc()
end program

C の関数をこんなところに。

$ cat cfunc.c
#include 

extern struct test_t{
       int a;
       double b;
} test;

void cfunc(){
       printf("%d,%f\n",test.a,test.b);
}

module のコンパイルは use されるより前に行わないといけないので次の順番でコンパイル。

$ gfortran -c binds.f03
$ gfortran -c main.f03
$ gcc -c cfunc.c
$ gfortran -o test *.o
$ ./test
15,150.000000

ミソはリンクを Fortran 側で行うこと。Fortran のランタイムはCからは呼ばれないので、Fortran のリンカーを使う必要があるのでした。

まず、構造体の宣言と構造体変数の宣言それぞれを bind(c) でやっておくことで、C のグローバル領域から参照できるようになります。

main では 構造体のメンバーに数値を代入してCの関数を呼んでいます。 main では 外部の関数を参照する必要があるので interface 文で C の関数のインタフェースを宣言しておきます。このとき、関数そのものを bind(c) で宣言しているので、グローバル領域にある関数の cfunc() が参照できるようになります。cfunc を subroutine で宣言していますが、このとき C側では void 宣言に相当するらしいです。

C の方では binds.f03 で宣言している構造体を extern 宣言しておいて、main で代入した値を受け取っています。

Fortran 側では C の変数と型のサイズを合わせるために c_int とか c_double でkind を指定しています。これは処理系で変数のサイズが違うことを吸収するためです。

この例はかなり無駄なことやってるのですけど、変数の渡し方の例ということで。

ちゃんと宣言しておけば Fortran 側の subroutine や function も C で認識できます。

subroutine で宣言されたサブルーチンは C では void 宣言の関数になるそうですが、function で宣言しておけば C の戻り値がある関数を呼ぶことができます。

C++ の場合はインタフェース部分を extern "C" で囲っておく必要があるそうです。Fortran と C++ は直接のインタフェースを持たないものですから。

あ、あと大事なことですが、Fortran と C では配列の添字の順番がひっくりかえります。 Fortran で A(i,j) とあるものは C では a[j][i] になります。メモリー上の配置が異るのですね。

これは考え方の違いかな。

Fortran は配列 = 行列だから、行列の並びと同じに並べることになりますね。行列は行ごとに並べますよね。a11, a21, a31, a12, a22, a32, a13, a23, a33 みたいに。

でも、C は配列の配列と考えるんですよね。まず a[1], a[2], a[3] があって、それぞれがさらに配列の要素を持つから、例えば a[1][1], a[1][2], a[1][3] みたいに、a[1] のさらに要素が存在する、と考えればわかりやすいかと。要は a** というのが a* のさらにポインターだというのと同じことですね。


【PR】ブログへ記事を投稿して報酬ゲット!アフィリエイトのA8.net