chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

プーシキン美術館展に行ってきた

どちらかというと、ヨメサンの希望が強く、中之島国立国際美術館で開催行されているプーシキン美術館展に行ってきた(W/ヨメサン)。結構有名な作品が一堂に展示されていますが、土曜日の夜に行ったせいかかなり空いていてゆっくり観ることができた。
展示される作品数が非常に多く、最初から一つ一つをじっくり見入ると、途中で力尽きてしまうので、自分はいつも会場をざっと周って、見たい作品を決めてから、改めて個々の作品を鑑賞するようにしています(会場の外に出ると再入場はできないので、会場内で戻っています。運営する側からすると人の流れがおかしくなるので鑑賞ルートを戻るのは良くないのかもしれません)。
今回のプーシキン展は、夜の時間帯は撮影可能になるので、みんな写真をバシバシと撮っていました。でもおおーーこれは!!!と思う作品は撮影禁止だったりして、撮影の際は注意しないと、美術館スタッフの方から注意を受けます。
まぁ一番見たかったのは、アンリ・ルソー作「馬を襲うジャガー」ですが、実物を見てもやっぱり、馬がジャガーを噛んでるように見えました。馬はまっすぐ前を見て淡々としているので。馬というより存在性が超越したユニコーンにすら見えますが。。まぁ幻想画なので、それもまた良しでしょう。みんな写真撮るので、この作品前は混んでいました。
展覧会で初めて見た作品の中でよかったのは、NO51、ジャン・ピュイ作、「サン=モーリスにある古代ローマの橋」という絵画で、何がどういいのか表現が難しいですが、非常に絵の温かみを感じる作品で、見ていて心が温かくなるというかそういう印象の作品でした。これは撮影できません。最後のお土産コーナーにも絵葉書になっていませんでした。
あとは、NO32,エドゥアール=レオン・コルテスの「夜のパリ」で、夜のパリのお店から溢れる光が印象的で、街の風景が細かい所まで描画されていて、いつまでも観ていたい作品でした。

今回は単眼鏡を持って行ったのですが、人が少ないのと、かなり近くまで寄って作品を鑑賞することができたので、あまり使う必要性はありませんでした。ただ、「夜のパリ」を単眼鏡で見た時は、筆のタッチや、道を走る馬車?の細かい所の描写を鑑賞することができました。自分の買ったのは4倍でしたが、まぁこの倍率でも十分でした(あまり倍率が高くなると視野が狭くなってどこを見ているのか迷子になるような印象も)。4倍でも自分の鼻が絵にくっつくぐらいの印象で細部を確認することができました(そもそも今回の展覧会ではかなり近くまで寄って鑑賞できるようになっているため、そこまで拡大できる)。単眼鏡は役立ったので、美術鑑賞のパートナーとして、次回からは展覧会に必ず持参するつもりです。

■ご参考URL
プーシキン美術展
http://pushkin2018.jp/

nRF51822(micro:bitのマイコン)でLチカ

LEDを自由に点滅させることができるとデバッグにも便利なので、micro:bitの5x5 LEDを点滅させてみた。5x5の一番左上のLEDは、P0.13とP0.4に接続されているので、それぞれのポートを出力設定にして、L/Hのレベル切り替えにより点滅させることができる。
左が動作結果。
下記のソースはWAITが入っていないので人の目で見て点滅しているようには見えない。。チカチカさせるにはWAIT文が必要。

#define GPIO_BASE 0x50000000
#define GPIO_PIN_CNF_BASE 0x700
#define GPIO_OUTSET 0x508
#define GPIO_OUTCLR 0x50C


void gpio_setup(void);
void led_blink(void);

/*********************************************************************
*
*       main()
*
*  Function description
*   Application entry point.
*/
void main(void) {
  int i;

  gpio_setup();
  for (i = 0; i < 100; i++) {
    printf("Hello World %d!\n", i);
  }
  do {
    i++;
    led_blink();
  } while (1);
}
void led_blink(void){
  static int state = 0;

   unsigned int *addr;
   unsigned int port_no;
   unsigned int flg;

  port_no = 13;
  flg = 1 << port_no;  // make flag

  if(state == 0){
     addr = (unsigned int *)(GPIO_BASE + GPIO_OUTSET);
     *addr = flg;         // port_13 to H
     state = 1;
  }else{
     addr = (unsigned int *)(GPIO_BASE + GPIO_OUTCLR);
     *addr = flg;         // port_13 to H
     state = 0;
  }
}

void gpio_setup(void){
   unsigned int * addr;
   unsigned int port_no;
   unsigned int flg;

   port_no = 4;
   addr = (unsigned int *)(GPIO_BASE + GPIO_PIN_CNF_BASE + port_no * 4);
   *addr = 0x1;   // dir:output Port:4

   port_no = 13;
   addr = (unsigned int *)(GPIO_BASE + GPIO_PIN_CNF_BASE + port_no * 4);
   *addr = 0x1;   // dir:output Port:13

   port_no = 4;
   addr = (unsigned int *)(GPIO_BASE + GPIO_OUTCLR);
   flg = 1 << port_no;  // make flag
   *addr = flg;         // port_4 to L

   port_no = 13;
   addr = (unsigned int *)(GPIO_BASE + GPIO_OUTSET);
   flg = 1 << port_no;  // make flag
   *addr = flg;         // port_13 to H
}

nRF51822(micro:bitのマイコン)のクロック設定を確認

まずはクロックの設定を確認、ということで、clock周りのレジスタを表示させてみた。自分のテストプログラムはクロック設定は何もせず、StartUP(asm)からmainが呼ばれるだけの実装。clock controllerは初期設定(RC oscillator)で動ているはずなんだが、、

#define CLOCK_BASE (unsigned int *)0x40000000
void show_clock_stat(void)
{
  printf("----------------------------------\n");
  printf("HFCLKSTARTED %x\n",*(CLOCK_BASE+0x100));
  printf("LFCLKSTARTED %x\n",*(CLOCK_BASE+0x104));
  printf("DONE %x\n",*(CLOCK_BASE+0x10C));
  printf("CTTO %x\n",*(CLOCK_BASE+0x110));
  printf("INTENSET %x\n",*(CLOCK_BASE+0x304));
  printf("INTENCLR %x\n",*(CLOCK_BASE+0x308));
  printf("HFCLKRUN %x\n",*(CLOCK_BASE+0x408));
  printf("HFCLKSTAT %x\n",*(CLOCK_BASE+0x40C));
  printf("LFCLKRUN %x\n",*(CLOCK_BASE+0x414));
  printf("LFCLKSTAT %x\n",*(CLOCK_BASE+0x418));
  printf("LFCLKSRCCOPY %x\n",*(CLOCK_BASE+0x41C));
  printf("LFCLKSRC %x\n",*(CLOCK_BASE+0x518));
  printf("CTIV %x\n",*(CLOCK_BASE+0x538));
  printf("XTALFREQ %x\n",*(CLOCK_BASE+0x550));
  printf("----------------------------------\n");
}

実行させると以下。なぜRUNとかのステータスフラグ(HFCLKSTAT)が0のままなのか??

----------------------------------
HFCLKSTARTED 4
LFCLKSTARTED 0
DONE 0
CTTO 0
INTENSET 0
INTENCLR 0
HFCLKRUN 0
HFCLKSTAT 0
LFCLKRUN 0
LFCLKSTAT 0
LFCLKSRCCOPY 0
LFCLKSRC 0
CTIV 0
XTALFREQ 0
----------------------------------

初期設定である、RC oscillatorで動作している間はHFCLKSTASTは変化しないのか??
ググって見つけたクロックの切り替え方(内部オッシレータから外付けXtalへの切り替え)

NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
NRF_CLOCK->TASKS_HFCLKSTART = 1;

while(NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)
{
}

https://devzone.nordicsemi.com/f/nordic-q-a/20628/using-external-16mhz-help-with-code/80401#80401

■追記

このサンプル(自分が作ったコード)は決定的な間違いを犯していて、ポインタに加算するのはいいけど、0x40000000の定数は宣言により、int型ポインタの定数なので、 0x00 + 1 すると、一見0x01になるように思うが、int型=4Bなので、0x1にならず0x4 になる。。意図通りには動いていない。。Cの基本が分かっていないということか。。使い始めたのは大学の時だが。。なんたる。。
修正版は以下

#define CLOCK_BASE 0x40000000UL
void clock_test(void){

  unsigned int *ptr ;
  printf("----------------------------------\n");
  ptr = (unsigned int *)(CLOCK_BASE + 0x100);
  printf("HFCLKSTARTED %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x104);
  printf("LFCLKSTARTED %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x10C);
  printf("DONE %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x110);
  printf("CTTO %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x304);
  printf("INTENSET %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x308);
  printf("INTENCLR %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x408);
  printf("HFCLKRUN %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x40C);
  printf("HFCLKSTAT %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x414);
  printf("LFCLKRUN %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x418);
  printf("LFCLKSTAT %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x41C);
  printf("LFCLKSRCCOPY %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x518);
  printf("LFCLKSRC %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x538);
  printf("CTIV %x(%x)\n",*ptr,ptr);
  ptr = (unsigned int *)(CLOCK_BASE + 0x550);
  printf("XTALFREQ %x(%x)\n",*ptr,ptr);
  printf("----------------------------------\n");
}

出力結果

----------------------------------
HFCLKSTARTED 0(40000100)
LFCLKSTARTED 0(40000104)
DONE 0(4000010c)
CTTO 0(40000110)
INTENSET 0(40000304)
INTENCLR 0(40000308)
HFCLKRUN 0(40000408)
HFCLKSTAT 10000(4000040c)
LFCLKRUN 0(40000414)
LFCLKSTAT 0(40000418)
LFCLKSRCCOPY 0(4000041c)
LFCLKSRC 0(40000518)
CTIV 0(40000538)
XTALFREQ ffffffff(40000550)
----------------------------------

ステータスを見ると、HFCLKがRCオッシレータで動いていることになっている。まぁCPUもクロックがないと動かないので、そういうことなんだろう。一方、LFCLKSTATが0であり、LFCLKは動いていないようだ。

micro:bit(nRF51822)でUARTを使う

micro:bit(nRF51822)でランタイムを介さずにレジスタを直接操作してUART通信をさせたい*1。が、、資料があまりない。nRF51のハードウエア仕様書にも周辺IOの制御方法については最低限の事しか書かれていないように思えるのだが。。基本的にはNordicが提供するSDKを使えよということなのか。。

http://yegang.hatenablog.com/entry/2014/09/14/151948

http://developer.nordicsemi.com/nRF51_SDK/nRF51_SDK_v7.x.x/doc/7.2.0/s110/html/a00766.html
SoftDeviceのAPI仕様書

softdeviceとして提供される、simple_uart_config等があり、このソースを見てどう動かすかを理解することに。。

https://github.com/finnurtorfa/nrf51/blob/master/lib/nrf51sdk/Nordic/nrf51822/Source/simple_uart/simple_uart.c
nrf51/lib/nrf51sdk/Nordic/nrf51822/Source/simple_uart/simple_uart.c

softdeviceは本来バイナリとして提供されるようだが、上記GitHubにはソースが公開されている。こちらとしてはまぁ使えるものは何でも使うというポリシーだ。

*1:マイコンレジスタを直接叩く実装をベアメタルというらしいけど、昔からベアメタルによるプログラミングであり、今時のプログラムが勝手にランタイムを何層にも乗せてレイヤーを上がっただけなのでは??と疑問が

やらずにおれないことをやる(水木氏の言葉)

忙しい時は休みが欲しいと思うけど、いざ休めるとなると、時間を持て余して、ごろりと横になってKindle無料コミックを読むぐらいしかない。
しかし、、やらずにおれないことをよく考えると、、俺VTLのmicro:bitへのポーティングとか、俺RNNを作成して、自動作曲とか、、そういうことがやりたい。まずは無料コミックを読んで、コミックを読むのに飽きたらボチボチPGを始める。。って、こんなことでいいのか!?
「やらずにはおれないことをやり続けること」。。「アイドルキュリオシティ」とも言うらしい。。

自分が自分で居られる時間、自分を再確認できる行為。。しかーし、仏教的には自分なんていない、手放せということらしいので、自分が自分が、、というのとは方向性が間違っているのかも。。よくわからない。やりたいことをどこまでも突き詰めて、全てを忘れて没頭できれば、それが自分を手放している時間なのかもしれません。

単眼鏡を買ってみた(ビクセンの4倍)

先日美術館に行って作品を見たのだけど、飾られていた彫刻の像の細かい所がよく見えず、眼鏡をとったり外したり、展示物に近づこうとして、ガラスに顔を当ててしまったりと、自分の視力の低下を思い知らされた。
美術鑑賞には単眼鏡がお勧めという記事を見かけて、自分も買ってみた。あまり倍率が高いと、、本体が大きくなり、視野が狭くなり、手振れが激しくなるということで、、お試しの意味もあって、ビクセンの4倍を買った。とてもコンパクトで手のひらにすっぽり入る(自分の手の大きさからすると、今回買った4倍は小さすぎて、ピント合わせ等の操作を考えると、6倍の方が収まりがいい)。美術館では普段は胸ポケットに入れておいて、細かい所を見たい時だけ、取り出して鑑賞するといった使い方が期待できる。
4倍なのでそれほど大きくはならないけど、、これでガラスに張り付かずに細部が鑑賞できたら嬉しい。。まだ美術館で使ってないので効果の程は分からず。
ご参考に、、
ピント合わせは胴体を回してレンズのピントを調整します。商品説明でははっきりしませんでしたが、レンズのキャップは最初から付属しています。レンズフィルターは(必要と思う人は)別途購入する必要があります。自分はフィルターなしです。

■ご参考URL

家でカレーを作る

なんでも自分で作りたい人種なので、今日はカレーを作った。外で食べずに家で作りたいけど、スパイスの香りで部屋の中がえらいことになるので、ヨメからは作るの禁止と言われいている(S&BのディナーカレーとかはOK)。幸い今日は、自分は休みで妻仕事なので、、こっそり作ってみた。これが最後のカレー作りというぐらいのノリで作っています。
材料(二人前のつもり)
ホールスパイス(スタータースパイス)

パウダースパイス

  • ニンニク、ショウガ 各1カケ
  • 玉ねぎ 大1 (大1/2が適量かと)
  • トマト 大1 (大1/2が適量かと)
  • 鶏肉 200g + ヨーグルト 大2
  • 塩 小 1/2 (最後に様子を見ながら塩味調整。スパイスの輪郭をはっきりさせるため(ナイル氏より)と、ごはんにかけて食べるので、じゃっかん塩味強めでもOK)

今回使ったスパイス類とニンニク・ショウガ(ターメリックは鶏肉をヨーグルトでつけるときに入れてます)
ホールスパイス(スタータースパイス)

  • クミン 小1/2
  • シナモン 1本
  • カルダモン 3個
  • ローリエ 1枚

パウダースパイス




まず鶏肉の下ごしらえ。鳥の皮は取る。鶏肉についてる脂肪も取れるところは取り除く。ターメリック小1をまぶして、ヨーグルトは大さじ2いぐらいでよく揉んで浸す。店によっては半日ぐらいつけるらしいです。今回は1時間ぐらい。今回の反省点:鶏肉が大きすぎて、口いっぱいに。。





トマト、玉ねぎも切っておく。手頃なのが無かったので、玉ねぎ大1、トマト小2を使った。
反省点:玉ねぎが多すぎてかなり甘い仕上がりになった。また、できあがりのカレーが苦くて、なんで苦いのか?と思ったら苦みの元はトマトだろうと。。多分

まずフライパンに油(大1.5)を入れて、スタータースパイスを投入。自分は油が冷たい状態でスパイスを入れてじょじょに温度を上げてます。熱い油にスパイスを投入すると、すぐに焦げそうなので。。料理番組では、油を熱してからスパイスを投入するやり方やってますね。。

スパイスの香りが立ってきたら、ニンニクとショウガを入れて軽く炒めて香りを出して、玉ねぎ投入(た玉ねぎを炒める時も火が入り続けるので、スパイスやニンニクの加熱はそこそこにしてます(この段階でやり切っていない))

玉ねぎをどこまで(どんな色になるまで)炒め続けるか?はどのような味に仕上げたいか?によって決まると思いますが、、今回は少しカラメル色になる程度に炒めました。
反省点:玉ねぎの量が多いのか、炒めすぎなのか、仕上がったカレーがかなり甘くなった。すっきりした味に仕上げたい場合は、ここは適当な色づきで終わっとくのが良いかと。

炒めた玉ねぎにざく切りしたトマトを投入。木べらでトマトを潰すようにしながら煮詰める。

トマトの水分が飛んでペースト状になったので煮詰め完了。ナイルさんによると、具材を加えてその都度しっかり火を入れるのが大事なのだそうです。水分の多い素材を加えた場合は十分に水分が飛ぶまで炒めると。。

パウダースパイスを投入して、火を入れて香りを出す。ここまでがカレーの素を作る工程(同様にナイル氏の説明)

ヨーグルトに浸けておいた鶏肉を投入。

上記のカレーの素と、鶏肉、ヨーグルト、ターメリックが一体になるよう火を通す。鶏肉の表面が白くなる程度で次の工程に進んでいいと思います。具材が多いのでその程度ぐらいしか火を入れられない。
反省点:カレーの素が多すぎて鶏肉にあまり火が入らず。ヨーグルトも焦げやすい。一旦カレーの素は取り出して、鶏肉だけを炒めるか??

水を加えて煮る。本の分量だと、4人分で水200ccらしいですが、、今回の場合200cc以下だとすぐに煮詰まりそうだったので、300ccで煮ることにしました。

10分ぐらい煮るそうです。まぁ煮る時間は気分次第でいいかも。

煮込み中に水分が飛んで煮詰まらないように蓋をしています。

最後は、自分の好みの濃さになるよう、蓋を取ってカレーの濃度と塩味の調整。シャブシャブではないけど、ややとろみのある濃度

ご飯にカレーをかけて完成。食べてみる。。かなり甘い。大阪名物、甘辛カレーとまでは言わないが、、かなり甘い。ヨーグルトが欲しくなる甘さ。これは、玉ねぎが多すぎるか、炒めすぎて甘みが強烈になっていせいだろう。そして、、苦い。苦みがどこから来るのかちょっと分からないが、トマトではなかろうか。酸味はいいけど苦みは雑味にも感じる。鶏肉の味はあまりしない。そして、鶏肉がデカい。口の中が鳥で一杯になる。。総じてどうか。。うーん、、旨いといえば旨いけど、甘、辛、酸、スパイスのバランスについて、まだまだ調整が必要な印象。全体としてのまとまり感に欠ける(今回、カイエンヌパウダーが小さじ1/4だったけど、もう少し辛くしても大丈夫)。一見それらしい物ではあるが、調整の余地あり。スパイスのフレッシュ感もイマイチだ。。少しずつ分量を変えながら何十回と試行錯誤を続けないと、こなれた味にはなりませんね。

久しぶりにカレーを作ることができて満足した。味に関してはいろいろ課題が残ったが。自分で作って自分で食べるのは、なんとも嬉しい。。

■おまけ
大阪は(大阪も?)スパイスカレーで盛り上がっていて、あちこちにカレー屋さんができています。どれもまぁサラサラとしたカレーソースで、ハーブとかスパイスがかかっていて、玄米とかが出されている。インドカレースリランカカレー、さらに、大阪カレー(?)と、もう皆で好き勝手にやっているような。。
自分は自分で作りたい方なので、TVのカレー番組とか、本を買って試しています。でもまぁ本場のスパイスを少量買うというのができないので、味の再現性は限度があるけど。それに、そもそも料理の腕前も。。

■ご参考
インド料理の本はいろいろ買いましたが、、自分はナイル氏のレシピを参考にして作っています。あとはTVでのカレー特集とか