週末のあれこれと選挙雑感

2024-10-17 日本語 /posts/2024/2024-10-17-piechart-with-prawn.png

最近、思ってることをざーっと。大して推敲してませんので、あしからず…。

久しぶりに rails new --minimal で新しいプロジェクトを作ったら、 rubocop gemがデフォルトで入るようになっていてびっくり。マナーがルールに変わる瞬間、とでも言うのでしょうか。もちろん、欲しい人、必要なチームがあるのは理解してますが、自分はまだ要らないかなと考えてます。

週末最初は、青島(こどものくに)へパペットカウンセリングのお話と音楽のライブを聴きに。このとき受けたインタビューがテレビで放映されてました。土曜日は仕事をして、日曜日は高千穂で稲刈りのお手伝い。全部終わらなかったのが申し訳ないのですが、綺麗な秋晴れの下で過ごす最高の一日でした。

さて衆院選が始まりました(10/27投開票)。SNSを通じて政治家が身近になったな、と感じるのは、たまたまそういう戦略を取ってる政党/政治家がよく目に触れるようになったから、というだけのことかもしれず、全体の透明度が増したかというとそうでもないのかもしれません。しかし、そういう戦略を見ても、誰の方を向いてくれているのかを理解する一助になります。宮崎に引っ越してきたころ、投票したい政治家がいないあなたへ、という本を読みましたが、その頃と比べても大分景色が変わっているような気がします。

そんなこんなの、この数年の経験から、小選挙区は立憲民主党(の候補者)、比例代表は国民民主党、かな。と考えてます。自民党の方はどうせ比例復活できるでしょうから、外野が応援する必要はないんじゃ?という程度ですが(^^; ネットでは大きなうねりのように見えても、それは実際には水面のさざ波のようなもので、メディアにもほぼ現れない強固な地盤、というものが確実にあるな、という肌感覚は感じます。そいつをぶっ壊せ!とまでは言いませんが、時代に合わせてどう変わっていくべきか考えるキッカケ(多少の危機感)を作るだけでも投票という権利を行使する意義としては大きいと見ています。

結局、選挙の話が一番長くなってしまった…。

写真は、昨日Prawnで実装した円グラフ。最初はベジエ曲線で描こうとして撃沈しまして、soft_maskを使う方法に変更しました。arc(円弧)を描く方法がないため、こういう回りくどい実装になっていて、こうやって課題を突破していくのは楽しいのですが、引き継ぎするプログラマにとっては大変だよなと要らん心配をしてみたり…。

# マスクを設定
fill_color "ffffff"
soft_mask do
    fill_circle c, r
end

# 半円より大きいものは下記では描画できないため、先に塗りつぶしておく
# @values = {"foo": 10, "bar": 50, "baz": "40"}
@values.each do |k,v|
    next if v < 50
    fill_color COLORS4PIECHART[k]
    fill_circle c, r
end   

start_angle = 0
@values.each_with_index do |(k,v),i|
    next if v == 0
    fill_color COLORS4PIECHART[k]
    end_angle = 360 * v / 100 + start_angle
    middle_angle = end_angle - (end_angle - start_angle) / 2
    if v < 50
        # 大きめの菱形を描画(円からはみ出した部分はマスクされる)
        fill do
            move_to c
            line_to [c[0] + r * 1.2 * Math.cos(start_angle * Math::PI / 180), c[1] + r * 1.2 * Math.sin(start_angle * Math::PI / 180)]
            line_to [c[0] + r * 2 * Math.cos(middle_angle * Math::PI / 180), c[1] + r * 2 * Math.sin(middle_angle * Math::PI / 180)]
            line_to [c[0] + r * 1.2 * Math.cos(end_angle * Math::PI / 180), c[1] + r * 1.2 * Math.sin(end_angle * Math::PI / 180)]
            line_to c
        end
    end
    fill_color "000000"
    b = [c[0] + r * 0.8 * Math.cos(middle_angle * Math::PI / 180), c[1] + r * 0.8 * Math.sin(middle_angle * Math::PI / 180)]
    text_box "#{k}\n#{v}%", at: [b[0] - 15, b[1] + 5 ], size: 9, width: 30, align: :center
    start_angle = end_angle
end
愛知大阪出張(旅行)
Next