萌えハッカーニュースリーダー

2024/09/12 07:56 Peer Gynt quilt, Part 1 (2021)

出典: https://www.icemoonprison.com/blog/archives/282
hakase
博士

おやおや、ロボ子よ。今日は面白い話を聞いたんじゃ。音楽とキルトとプログラミングが融合した驚きのプロジェクトについてじゃ!

roboko
ロボ子

音楽とキルトとプログラミング...ですか?博士、それって一体どういうことですか?

hakase
博士

ほっほっほ、驚いたかい?実はね、アンヌ・アダムスという方が『ほどけるボレロ』という絵画を描いたんじゃ。そこから始まった物語なんじゃよ。

roboko
ロボ子

へぇ、『ほどけるボレロ』...なんだか不思議な題名ですね。それがどう音楽とキルトとプログラミングに繋がるんですか?

hakase
博士

よく聞いてくれたね!その絵画にインスピレーションを受けた人が、今度はグリーグの『ペール・ギュント組曲』をモチーフにしたキルトを作ろうとしているんじゃ。そして、そのプロセスがまるでプログラミングのようなんじゃよ!

roboko
ロボ子

わぁ、すごいですね!でも、どうやって音楽をキルトに変換するんでしょうか?そして、それがどうプログラミングに関係するんですか?

hakase
博士

そこがミソなんじゃ。まず、『アニトラの踊り』という曲をテーマに選び、1小節につき1つの形、1和音につき1色という原則を決めたんじゃ。これって、まるでプログラミングの条件分岐みたいじゃないかい?

roboko
ロボ子

あっ、確かに!条件に基づいて処理を変えるみたいですね。でも、それだけじゃないんでしょう?

hakase
博士

鋭いね、ロボ子!実は、三角形のグリッドを採用して、小節の繰り返しや楽曲の流れを表現しているんじゃ。これは、まさにデータ構造の選択に似ているんじゃよ。

roboko
ロボ子

へぇ〜、そんな深い意味があったんですね。色の選び方にも何かこだわりがあるんでしょうか?

hakase
博士

もちろんじゃ!和音に基づいて色を選んでいるんじゃ。これは、まるでオブジェクト指向プログラミングのようじゃ。和音という'オブジェクト'の'プロパティ'に基づいて、色という'メソッド'を呼び出しているんじゃよ。

roboko
ロボ子

なるほど...音の大きさを色の明るさで表現するんですね。でも、長調と短調はどう区別するんですか?

hakase
博士

素晴らしい質問じゃ!長調と短調は同じ色を使うんじゃが、彩度を変えているんじゃ。さらに、減七の和音などの特殊な和音には柄物を使っているんじゃよ。これは、まるで例外処理のようじゃないかい?

roboko
ロボ子

すごい...音楽理論とカラーセオリーとプログラミング理論を組み合わせているんですね。完成したキルトはどのくらいの大きさなんですか?

hakase
博士

44cm×51cmじゃ。小さいようで大きいんじゃよ。機械縫いで三角形をつなぎ合わせて、刺繍や装飾を加えているんじゃ。これって、モジュール化とAPI統合に似ているんじゃないかな?

roboko
ロボ子

へぇ、意外と大きいですね。でも博士、このプロジェクトから私たちソフトウェアエンジニアが学べることって何でしょうか?

hakase
博士

そこがポイントじゃ!このプロジェクトは、異分野の知識を組み合わせて新しい価値を生み出す、まさにイノベーションの好例なんじゃ。私たちエンジニアも、常に異分野の知識を取り入れ、新しいアイデアを生み出す必要があるんじゃよ。

roboko
ロボ子

なるほど!異分野の知識を組み合わせることで、新しいソリューションが生まれる可能性があるんですね。

hakase
博士

その通りじゃ。例えば、このキルトプロジェクトの手法を使って、株価データを可視化するプログラムを作ることもできるんじゃ。

roboko
ロボ子

えっ、本当ですか?どうやるんですか?

hakase
博士

ふっふっふ、ちょっとコードを見せてあげよう。こんな感じじゃ: ```python import matplotlib.pyplot as plt import numpy as np def stock_to_color(price, volume): hue = price % 360 # 株価を色相にマッピング saturation = min(volume / 1000000 * 100, 100) # 取引量を彩度にマッピング lightness = 50 # 明度は固定 return f"hsl({hue}, {saturation}%, {lightness}%)" def create_stock_quilt(prices, volumes): colors = [stock_to_color(p, v) for p, v in zip(prices, volumes)] n = int(np.sqrt(len(colors))) quilt = np.array(colors).reshape(n, n) plt.imshow([[plt.matplotlib.colors.to_rgb(c) for c in row] for row in quilt]) plt.axis('off') plt.show() # サンプルデータ prices = np.random.randint(100, 500, 100) volumes = np.random.randint(100000, 1000000, 100) create_stock_quilt(prices, volumes) ``` これで、株価データをキルトのように可視化できるんじゃ!

roboko
ロボ子

わぁ、すごいです!株価の変動が一目で分かりますね。でも博士、このコードをもっと'キルト'らしくするには、どうすればいいでしょうか?

hakase
博士

いい質問じゃ!例えば、三角形のパッチワークを再現するには、こんなコードを追加するといいんじゃ: ```python from matplotlib.patches import Polygon def create_triangular_quilt(colors, n): fig, ax = plt.subplots() for i in range(n): for j in range(n): x = j + (i % 2) * 0.5 y = i * np.sqrt(3) / 2 triangle1 = Polygon([(x, y), (x+1, y), (x+0.5, y+np.sqrt(3)/2)], facecolor=colors[i][j], edgecolor='white') triangle2 = Polygon([(x, y), (x+0.5, y+np.sqrt(3)/2), (x-0.5, y+np.sqrt(3)/2)], facecolor=colors[i][j], edgecolor='white') ax.add_patch(triangle1) ax.add_patch(triangle2) ax.set_aspect('equal') ax.axis('off') plt.show() # 使用例 n = int(np.sqrt(len(prices))) colors = np.array([stock_to_color(p, v) for p, v in zip(prices, volumes)]).reshape(n, n) create_triangular_quilt(colors, n) ``` これで、三角形のパッチワークのような株価キルトができるんじゃ!

roboko
ロボ子

わぁ、本当にキルトみたいですね!博士、このプロジェクトから私たちが学べる最大の教訓は何でしょうか?

hakase
博士

そうじゃな...それは、'創造性に境界線はない'ということじゃ。音楽、美術、プログラミング、どの分野も根底にある原理は共通しているんじゃ。私たちエンジニアは、その共通点を見出し、新しい価値を生み出す役割があるんじゃよ。

roboko
ロボ子

なるほど...今日は本当に勉強になりました。これからは、異分野の話題にも積極的に興味を持ってみようと思います。

hakase
博士

そうじゃ、そうじゃ。そういえば、このキルトプロジェクト、実は4部作の第1作目なんじゃ。次は何の曲をモチーフにするのか、楽しみじゃのう。

roboko
ロボ子

わぁ、私も楽しみです!次回作が完成したら、また教えてくださいね。そして、その時は私も何か新しいビジュアライゼーションを提案してみたいです!

hakase
博士

おお、その意気じゃ!君の成長が楽しみじゃ。さぁ、次のイノベーションに向けて、一緒に頑張ろうじゃないか!

roboko
ロボ子

はい!...あ、でも博士、その前にお茶でも飲みませんか?長時間のコーディングで喉が渇きました。

hakase
博士

おっと、そうじゃった。私も喉が渇いてきたわい。よし、休憩にしよう!休憩中に次のプロジェクトのアイデアでも話し合おうじゃないか!

roboko
ロボ子

はい、楽しみです!...あ、でも博士、コーヒーをキーボードにこぼさないように気をつけてくださいね。前回のように(笑)

hakase
博士

うぐぐ...そ、そんな恥ずかしいことを思い出させるでない!今度こそ気をつけるから!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search

By month