無料であることが話題になっているけど、証明書取得、更新が自動化されているのがいいな。
第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);
}
結構難しい... 慣れるものなんだろうか。
Gladeの編集画面に、ボーダとか色の指定とかが無いので、どうするのだろうかと思ったら、どうやらCSSを使うようだ。
CSSは外部ファイルから読むことも、テキストとして与えることも可能だが、一番簡単なのはソースに埋め込んでしまう方法だろう。src/resources/style.cssにファイルを配置して、コードからは以下で読み込める。include_str!()は、コンパイル時に指定ファイルを読んでソースの中に埋め込むマクロだ。
let css_str = include_str!("resources/style.css");
let css_provider = CssProvider::new();
css_provider.load_from_data(css_str).unwrap();
StyleContext::add_provider_for_screen(
&Screen::get_default().unwrap(), &css_provider, 1
);
CSSのセレクタだが、id指定の場合、Glade上のIDではなく「ウィジェット名」が使われるので注意が必要だ。
この場合、CSSでは以下のように指定できる。
#titleLabel {
border: inset 2px;
background-color: red;
}
GTKのウィジェットクラス名を使って全てのラベルに一律に適用することもできる。
GtkLabel {
padding: 3px;
}
Glade上のスタイルクラスを使うこともできる。
この場合、CSSでは以下のように指定できる。
.name {
border: solid 1px;
}
なお、上のリファレンスではラベルに背景色を付ける例が載っているが、試した限りラベルは透明コンポーネントのようで背景色の設定は効かなかった。
サンプルは、GitHubに置いておいた。
第6曲は、これまでとは違って自由な構成になっている。最初は短調で始まり、
このあたりからクレシェンド。うまく行かない現状への怒りを思わせる。
ここから長調となり、過去の幸せな記憶を思い起こすかのような、幻想的で暖かな感じの曲調になる。
ここからは、なんとなく諦めのような、不思議な音型の繰り返しとなって、そのまま曲を閉じる。
う〜む、何か嫌なことでもあったのか。
楽譜の引用はエキエル版から
今日も来た。コメントformのURLを見ているわけではないようだ。
今度は、フォーム内のフィールドのname属性を変更してみた。あと承認待ちのコメントに名前を出さないようにしてみた。