橋本 Hashimoto   Baku

橋本 Hashimoto   Baku

CCBT 2024年度アーティスト・インキュベーションへの応募 (Scratchpad)

This page is a personal scratchpad.

応募者について

橋本麦(はしもと ばく)

映像作家

Glisp(ジー・リスプ)とは

映像作家の橋本麦が2020年より継続しているデザインツール開発プロジェクト。道具の自己拡張性を掲げ、デザインのためのLisp方言の実装、Lispをベースとしたデザインツール、そのためのライブラリの作製など、多岐に渡って個人でオープンソース開発を続ける。 ↑( 説明が下手なので、はなから伝わると思っちゃいないです…)

兎角も遊んでみよう

要は何をしたいの

  • 超具体的に ― めちゃくちゃ柔軟でたのしいベクター・ドローイング・ツールをつくる
    • 意味のあるものから、何に使えるのかよく分からないものまで
    • 究極的な目標: 作者自身の制作におけるQuality of Lifeを高めたい
  • 技術的に ― プログラミング言語を基盤としたオープンソース・デザインツールをこしらえる
    • プロジェクトファイルの記述と、ツール環境設定、スクリプティング、その全てに同じLispという同図像性を持ったプログラミング言語を用いる
      • 同図像性(Homoiconicity): 言語のコードをその言語で操作できる特性。道具による操作の対象を道具それ自体に向けることができる

    • 一つのことを色んなやり方で (“There's more than one way to do it”)
      • 🎨キャンバス: 直に触れる図形そのもの
      • 🎛️インスペクタ: スライダーやピッカーなどで視覚的にパラメーターを調整できる
      • 📝コード: テキストによるプログラミング
        • (style (fill "tomato") (circle [0 0] 100))
    • ソフトウェア上でエミュレートされたハードウェア(e.g. Photoshop = 写真現像)を使わされるのではなく、真に「ソフト」なソフトウェアを制作者に提供する
    • pulling oneself up by the bootstraps
  • 思想的に ― 「道具をつかう」ことと「道具に手をいれる」こととの垣根をなくす
    • 不思議の環(Strange Loop) → つくることの主体性を取り戻す
    • 製品としての道具に合わせて人のスキルを制度化・規格化するのではなく、人に合わせて道具が「分化」していく
      • 人と道具とが共進化していく

ない

  • 「プラットフォーム」を作ってはいけない
    • 枠組みの内側で楽しんでもらえるものを提供するのではなく、枠組みそのものをブチ壊すための手段をコモンズに野ざらしにする
  • すぐに「ひろく市民のため」にしようとは考えていない
    • 魚でも、釣り竿でもなく、マザーマシンを提供する
  • 合目的性・有用性のもと、良さを評価しない
    • 価値体系に組み込まれているものしか評価できない

CCBTに何を求めるか

  • 経済的支援
    • プログラム期間中、僕がいかに広告仕事をしなくて済むかが、プロジェクト成果の質において鍵を握る
    • ※ あくまで経費と外注費しか計上できないですが
  • 技術的支援
    • プログラミング言語開発、とんでもなく難しいですね
    • 型検査, 型推論, Ad-hoc多相, incremental evaluation, bi-directional evaluation, ハードウェア開発, ベジェ曲線, 画像処理系
  • ハイプ支援
    • 元来とてもgeekでnerdyで伝わらない本プロジェクトを、 なんかこう、いい感じに公益性があって、イノヴェーティヴかのように見せかけるブランディング(“Fake it, till you make it”)
    • “Civic Creative”を冠する公益機関のプロジェクトとして採択頂くこと自体が既に十分ハイプ

Thank you


Appendix

(defn path/rect
  {:doc  "Generates a rect path"
   :params [{:label "Rect" :type "rect2d" :desc "the rectangle dimension"}]
   :handles {:draw (fn [e] (apply-draw-handle rect2d e))
             :drag (fn [e] (apply-drag-handle rect2d e))}
   :transform (fn {:params <a href="/x%20y%20w%20h">x y w h</a> :transform xform}
                [`[~@(vec2/transform-mat2d xform [x y]) ~w ~h]])
   :initial-params <a href="/-100%20-100%20200%20200">-100 -100 200 200</a>
   :return {:type "path"}}
  <a href="/x%20y%20w%20h">x y w h</a>
  [:path
   :M [x y]
   :L [(+ x w) y]
   :L [(+ x w) (+ y h)]
   :L [x (+ y h)]
   :Z])
(defalias rect path/rect)

(def path/circle
  (set-meta!
   (let [K (/ (* 4 (dec (sqrt 2))) 3)]
     (fn [[x y] r]
       (let [k (* r K)
             x+r (+ x r)
             x-r (- x r)
             y+r (+ y r)
             y-r (- y r)]
         [:path
          :M [x+r y]       ; right
          :C [x+r (+ y k)] [(+ x k) y+r] [x y+r] ; bottom
          :C [(- x k) y+r] [x-r (+ y k)] [x-r y] ; left
          :C [x-r (- y k)] [(- x k) y-r] [x y-r] ; top
          :C [(+ x k) y-r] [x+r (- y k)] [x+r y] ; right
          :Z])))
   {:doc "Generates a circle path"
    :params [{:label "Center" :type "vec2"
              :desc "the centre of the circle"}
             {:label "Radius" :type  "number"
              :desc "radius of the circle" :validator #(max 0 %)}]
    :handles {:draw (fn {:params [c r]
                         :return path}
                      [{:type "arrow" :id :radius
                        :pos (vec2/+ c [r 0])}
                       {:type "translate"
                        :id :center
                        :pos c}])
              :drag (fn {:id id :pos p
                         :params [c r]}
                      (case id
                        :center {:replace [0 p]}
                        :radius {:replace [1 (vec2/dist c p)]}))}
    :return {:type "path"}
    :initial-params [[0 0] 100]
    :transform translate-first-param}))
(defalias circle path/circle)