第10曲まで長調が続いていたが、11曲目で短調になる。初期の意欲的な作品とは異なり、簡素な旋律で構成されている。
ここは、中指だけで弾けとの指定。全音版には無いのでエキエル版独自の指定か。
中間部は、素朴で暖かな和音進行。
最後は長調に転じて静かに曲を閉じる。
楽譜引用はエキエル版から。
第9曲の最後で不気味な音型を見せつつ、第10曲は依然として明い曲で肩透し。第10曲はノクターンというより舞踏曲といった感じ。実際、管弦楽曲に編曲されて、バレエ曲「レ・シルフィード」に使われている。
曲は導入部から始まる。
3部形式が復活。中間部の第1、2小節目は音型がほぼ同じだが、スラーのかかり方が微妙に違う。ショパンの曲はこういうのが多い。
第3、4小節目も同様に、スラーのかかり方が微妙に違う。
そして最後は、導入部が繰り返されて終わる。すばらしき線対称の構成美。
楽譜引用はエキエル版。
第7曲の最後で光が差して来て以降、第8、9曲と長調が続く。作品32の最初の曲は、穏やかな夢見るような旋律で始まる。
この曲で特徴的なのは、穏かな流れを断ち切るstretto。しかし、この緊張はすぐに解けて元の穏かな長調に戻る。
2つ目の主題も、夢見るような旋律。基本的にこの2つの旋律と経過句で曲は構成される。
しかし、最後に不気味な心臓の動悸のようなF音が連打され、そのまま短調で曲を閉じる。なんか「次回を乞御期待」みたいな感じ?
楽譜引用はエキエル版
無料であることが話題になっているけど、証明書取得、更新が自動化されているのがいいな。
第8曲は、これまでこだわたっていた3部形式を捨て、2つの主題を交互に組み合わせ、そこに様々な装飾を施す形式になっている。まず幻想的で甘美な主題で始まる。
2つ目は、憂いを含んでいつつも、悲壮過ぎないどこか影のある主題。
第一主題の再現は、pp。
第二主題は、今度は長調で現われる。
そして再度の第一主題。今度はffと様々に変化するが、少しも不自然さを感じさせないのはさすが。
そして、この展開で曲も終わりかと思いきや、そのまま引っぱる。
この左手の音型も曲の終わりを感じさせるが、そのまま7小節引っぱる。
最後は7連符で静かに終わる。個人的には、ショパンのノクターンで一番好きな曲。
楽譜引用はエキエル版。
星野さんの「進化する銀行システム 24時間365日動かすメインフレームの設計思想」が出版された。
社内で毎年、執筆道場をやっていて、かれこれ5年になるが、星野さんは最初の年に来てくれて、それから5年あまりをかけて大作を完成させた。
あまり表に出ることのない銀行勘定系システムというものが、どういう仕組みで作られて運用されているのか、どういう失敗があり、どういう対策がおこなわれてきたのか。そして東京オリンピックの頃から、システムはどのように変遷してきたのか。こういった事柄が詳細に解説されている。調べるだけでもとても大変だったと思う。
第7曲は、再び3部構成に戻っている。出だしは深い霧に包まれた暗闇の中を進むようなアルペジオで始まる。
この曲もペダル指定の中にスタカートというのが多用されていて、ここをどう弾き分けるかが腕の見せどころとなる。中間部は、これまでと異なり出だしと同じ短調のままとなっている。
同じ旋律が繰り返されるが、符点が複符点となって緊迫感を盛り上げていく。
そして、勝利宣言のような旋律が力強く現われるが、長くは続かずに短調の闇に沈み込んでいって最初の暗いアルペジオとなる。
しかし、最後は次第に光が差してきて、明るくなったところで曲を閉じる。何か良いことがあったのかな。
楽譜の引用はエキエル版。
テキスト描画自体は、cairo::Contextにshow_textというのがあるので簡単だ。
context.move_to(100f64, 200f64);
context.set_source_rgb(0.0, 0.0, 0.0);
context.set_font_size(200.0);
context.show_text("Help");
context.stroke();
再描画の時のために描画領域を求める方法だが、cairo::Contextにtext_extentsがあって、これで得られる。ここには、width, height, x bearing, y bearing, x advance, y advanceが含まれている。このうちx advanceとy advanceが良く分からないが、残りの4つのパラメータで描画領域は計算できるようだ。
始点をx, yとすると、描画域は以下で得られるようだ。
左上: (x + x bearing, y + y bearing) 右上: (x + x bearing + width, y + y bearing) 右下: (x + x bearing + width, y + y bearing + height) 左下: (x + x bearing, y + y bearing + height)
サンプルは、GitHubに置いておいた。
Rustで、任意の処理をはさみこんで、前後に定型処理を入れるようなことをしたい。例えば処理の時間を測って一定時間を超えていたらタイムアウト処理を呼ぶようなのを考えてみる。
struct Foo {
i: i32
}
impl Foo {
fn around_mut<'a, T, F: FnMut(&mut Foo) -> T + 'a>(&mut self, mut f: F) -> T {
let before = self.get_time();
let ret = f(self);
let after = self.get_time();
if after - before > 1000 {
self.timeout()
}
ret
}
fn around<'a, T, F: Fn(&Foo) -> T + 'a>(&self, f: F) ->T {
let ret = f(self);
ret
}
fn timeout(&self) {
}
fn get_time(&self) -> i32 {
222
}
fn inner_mut(&mut self) -> i32 {
111
}
fn outer_mut(&mut self) -> i32 {
self.around_mut(move |this| {
this.inner_mut()
})
}
fn inner(&self) -> i32 {
111
}
fn outer(&self) -> i32 {
self.around(move |this| {
this.inner()
})
}
}
fn main() {
let mut foo_mut = Foo { i: 123 };
let ret_mut = foo_mut.outer_mut();
println!("Ret: {}", ret_mut);
let foo = Foo { i: 222 };
let ret = foo.outer();
println!("Ret: {}", ret);
}
結構難しい... 慣れるものなんだろうか。