2014年3月25日火曜日

言葉を紡ぐ、構造を紡ぐ、仕組みを紡ぐ

最近、サーバサイドの業務もこなしつつ、フロントエンドの実装でFlashを使っています。

Flashというと、僕らの世代には動画のイメージが強いですが(現在も動画配信のツールとして無くてはならないものであることに変わりはないのだけれども)、実際には現在となっては強力な構文を持ったActionScriptを用いて、インタラクティブなコンテンツを制作する上で重要な役割を担っています。


......というのもじつはもはや3~4年ぐらい前までの話で、2010年過ぎたあたりからはブラウザの足並みが揃ってきたのもあって本格的にJavaScript,HTML5に代替されている昨今ですが。

ただまぁ業務レベル、国内レベルにおいてはまだまだFlashの受容も根強く、ソースコード丸見えになるjsではちょっと、だったり、現在のFlash統合開発環境はそのままAIRアプリやiOS,Androidにコンパイルできたりと、意外とお先真っ暗でもないようです。(使って初めて知ったけど)

というわけで、物理モデリング系、ゲーム系の開発も視野に入れつつフロントエンド実装に勤しんでいる昨今でありますが、ActionScript3.0の教科書の序文が非常に印象深かったので引用致します。

Flashの世界には、その作業の中でActionScriptを理解し使う人々とそうでない人々の間に深い隔たりがあります。私達は時々これを”デザイナー”と”デベロッパー2の違いであると勘違いします。その勘違いは、”デザイナー”はコードを理解せず、”デベロッパー”はデザインが分からないものだという思い込みの上に成り立っています。これはどう見ても、物事を都合よく単純化しすぎた見方です。
“デザイナー”や”デベロッパー”という呼び方は、私達がまだWebというエキサイティングなメディアを理解しようと務めていたWebの勃興時代には、それで十分でした。以来10年以上たって私達は、このメディアは全く新しいものかというとそうではなく、既存のものから孤立しては存在しないものなんだとういうことに気づきました。Webは既存のものとともに存在するものだということがわかったのです。
この言い方は、職務内容の説明としては甚だ不十分です。あなたの携わっているデザインの仕事は、どのようなものですか?チームの中で、あなたの役割は何ですか?あなたの専門はグラフィックデザインですか?それともモーショングラフィック、或は情報デザイン(アーキテクチャ)、オブジェクトデザイン(モデリング)ですか?”デザイナー”という包括的な呼び方のの赤に、グラフィックデザイナー、情報デザイナー、アニメーター、イラストレーターをひっくるめてしまうことで、”デザイナー”という呼び方からその意味を奪ってしまっているのです。
“デベロッパ-“の役割は、少なくともFlashを使った場合では、少しは明確になっているようです。”デベロッパー”というと、その仕事にはおそらく、ユーザーインターフェイスの構築やプログラミングが含まれると考えられます。
職務内容を説明するときに必要な細部まで伝えられない肩書きを使用すると、伝わる意味が極めて限られたものになってしまいます。たとえば、”わたしはデザイナーです”という言い方は、プログラミングを学ぶ時間は無いと言おうことを正当化するために使うことができます。同様に、”私は直線を引くことはできません”という言い方は、”デベロッパー”にはグラフィックの基本やモーショングラフィック、ユーザーインターフェイスのデザインを学ぶ時間が無いということを正当化するための言い訳として使うことができます(一般的に信じられているのとは逆に、優秀なグラフィックデザイナーやモーショングラフィックデザイナーは、イーゼルや鉛筆では印象的な直線を描くことはできません。同様に、私のしっている才能あふれるアーティストの何人かも、そこそこのユーザーインターフェイスをデザインすることもできません。)

そうではなく、個人的なレベルでみなさんは”アーティスト”という肩書きを受け入れ、その肩書を携行できる権利を求めるべきなのです。その権利を得ると皆さんの仕事のやり方は大きな影響を受ける事になりますが、みなさんの作成物にはさほど影響しません。旅の目的地は仕事を完璧に仕上げるところにあるのです。

好むと好まざるにかかわらず、わたしたちは現代のアーティストです。デジタルメディアで満たされたこのクレイジーですばらしいコングロマリットが私達のイーゼルであり、パレットであり、絵筆なのです。わたしたちは美しいものや示唆にとんだもの、他に影響をおよぼすものを生み出すことができます。そして過去の時代よりも多くの方法で多くの人びとのっ子ろを動かすことができるのです。

わたしたちのメディアは広大で、形状やコントラスト、複写、カラー、印刷に充填をおいたグラフィックデザインや、フレーミング、編集、合成が、アニメーターの意図や表現のつまった道具箱のように、また作家や監督、俳優が生み出す芸術のように動作するモーショングラフィックデザイン、ユーザーインターフェイスデザインと情報アーキテクチャ、そしても中でもいちばん新しく、まだ芸術形式とは認められていないプログラミングなど、多くの事柄を包んでいます。

しかしプログラミングは芸術形式なのでしょうか?写真や映画は、絵画や操り人形、演劇が芸術形式であるのなら、芸術形式といえるのでしょう。
写真の技術が開発されたとき、それは技術が到達した見事な成果であると歓迎されましたが、それだけのことでした。写真は現実を捉える技術的な行為であると見なされたのです。それから150年以上たって、わたしたちは今日、主観的な表現や芸術表現の手段として写真が表す意図をくみとることができます。
私達が映画を、現実の絶対的、客観的な断片として、しかし芸術性の欠けた記録として目撃したのはわずか100年前です。今日わたしたちは映画の客観的な特質や、名匠の作品とホームムービーを分ける多くの事柄を心得ていますが、それは最初からそうであったわけではありません。類とオーギュストのルミエール兄弟がリヨン駅に機関社が到着するフィルムを上映した時、それを見た人々は、機関社が突進してくると思い込み恐怖のあまり逃げ出してしまいました。今ではわたしたちの映画に対する理解はもっとふかまっており、私達は映画の”読み方”を知っています。しかし映画通にはなったのですが、プログラミングに関してはまだそこまで理解が深まっていません。

アーティストと職人を分ける魔法の線があります。それは創造性のひらめきによる線なのですが、苦心惨憺して切り拓く線で、尽きることのない情熱やエネルギー、一意専心の積み重ねによって初めて着想できる線です。アーティストは同時に畏敬の年を起こさせ、経験を分け与え、他人の感情を高ぶらせる才能をみなぎらせています。絵画や彫刻、建築の名匠にアーティストの呼び名が用意されたという事実からみれば、私達は芸術を構成するものは何で、なぜその名匠がアーティストなのかを心得ていることになります。評価の幅は過去よりも広くなっているのです。
今日わたしたちは、プログラミングは純粋に技術的な仕事であるとみなしています。創造性と技術性を分けて語るとき、プログラマーは後者に属します。プログラマーは今日、映画の作成者が前世紀の初頭そうであったように、人目につかないところで懸命に働き、その微妙な芸術性のニュアンスに適切な評価が下される”コード通”の社会の到来を待つアーティストなのです。こんな社会が到来するまで一世紀かかるでしょうか?わたしはそうは思いません。

Keith Petersのようなプログラマ/アーティストのおかげで、私達はプログラミングとビジュアルアートの間に渡された橋を目撃することができます。この端はプログラミングの中の隠れた技術性の理解を社会に広め、その評価を高める役割を果たします。Keithの書くコードは視覚的で生き生きとしており、躍動しながら呼吸をして、成長し、先を全く予測できないほどにユニークな、素晴らしい方法で変化します。変数やステートメント、ループ、メソッド、数々のクラスは見る者の感情に訴え、日常の体験を超えた全くアタtらしい光と音で構成された世界の発見へと導いてくれます。

本書のオリジナル版はActionScript2.0で記述されていました。その後Flashのプラットフォームでは、ActionScript3.0という新しいスクリプト言語とFlashPlayer9への新しい仮想マシンの導入という大きな変革がもたらされました。この改良は新しい可能性の世界を切り開くもので、わたしは、Keithがこの新しいテクノロジーを使って「doundation ActionScript Animation: Making Things Move!」に修正を加えると聞いたとき、非常に興奮しました。とは言え、そのワクワクするような技術や新しい本のことはさておいても、一番重要なことを忘れてはいけません。
本書は芸術に関する本なのです。
プログラミングは新しい、エキサイティングな芸術形式で、毎日のように人々の目前で成長し、関連性を深め、評価を高めています。どんな技術形式にせよそれを学ぶ最善の方法は修行を罪、師匠のもつ貴重な体験を共有することです。本書では、本書の師匠が芸術的なプログラミングの旅へと皆さんを導いてくれます。これはKeithが皆さんのとなりに座っている環境の次に恵まれた環境です。本書は発見の旅への案内役を果たすのです。
駆け出しのアーティストはFlashマスターの仲間入りを果たすべく、その準備をはじめなければなりません。
本書に書かれた知識は、皆さん自身の創造的な可能性の扉を開く礎となります。よくいわれるようにあとは10%のいひらめきと90%の努力です。夢見る人は計画し、アーティストは創作します。さあはじめましょう!
みなさんのイーゼルと絵筆は用意されています。ここから皆さんの旅が始まるのです。


僕は卓越したプログラマでもないし、卓越した芸術家でもないから、偉そうなことは言えないのだけれども、僕はこの序文を読んだ時に、軽い衝撃を受けた。
知っていて、それだからこそ嫌いじゃないのであろう情報技術というものに潜在的に抱いていた思いを説明してもらった思いがした。
十分に僕らは論理的で、それでいて芸術的な存在で居ることができる。(すくなくともその素地は与えられている。)

2014年3月19日水曜日

「小さく書いていくことで露になる活字の群れそのもの或いはその生産過程を体験していく自分自身について(1)」



ある作家に対して痛く感激し、触発されるようにして書き溜めた日記(2013528日のもの)の文章を意味の通るように多少修正し、投稿します。先に投稿した実際の文字そのものが、文の内容そのものにも密に関わっています。後半は後日。


///

ロベルト・ヴァルザー(Robert Walser, 1878-1956)というスイス人は、自身を独白することへの羞恥に一生涯囚われ乍らも、文字を書くという行為に依ることは諦めず、結果正常な形では全く筆を取れない人間であった。おそらくは語るべき内容を彼は無数に所有していた。告白と創作への欲求に強烈に駆られていた。しかしそれに対する黙秘の意識や恥じらいが先立ち、彼はバランスを欠いた状態で内面に大きな矛盾を抱え込んでいたのだろう。

microscriptsMikrogrammeという彼が編み出した鉛筆による超微小文字の草稿に出会ったのは先週の話だが、彼はこの誰にも解読できない方法によってのみ「書くこと」を再開することができた。23ミリの小さな糸のようなインクのしみは、まさしく私自身が呪物的(fetisch)に異常に共鳴し、興奮してしまうような文字、ことばの破片であり、見られたくも語りたくもないことに対する創作の熱をしかし密かにどこかで発散させたいと願っている、相反する、分裂した自分の思いと見事に重なるものがあった。ヴァルター・ベンヤミン(Walter Benjamin, 1892-1940)が「もう一人の」小文字書きであったという事実は、彼が独自に抱えていた思想の形成そのものの特徴を直接方向付けるものでもあり、彼のアーカイヴに見られるドイツ語によるメモ書きはまさしく絶え間なく降り注ぐ「活字の吹雪(Gestöber der Lettern)」を思わせるに相応しい。文字はこのような方法で書かれるとるとき、微細な塵のように群を成し襲いかかってくるようなものとしてその本来の正体を露にする。

ヴァルザーもベンヤミンも、今私が、ここまで小さな文字をしかも日本語という別の言語で、自身の筆跡に感化され小文字を書き出していることを知ったらどう思うだろうか。「書く」という動作は、その瞬間においては身体的に動きのある出来事であり、ことばが液化してまさにペン先からほとばしっている(まさに今この)現場は、副次的な処理過程では全くなく、とても不可解で驚くべき活動として捉えられるべきである。そしてまたこの「剥片(はくへん/Flocke)は、果たして書かれるために書かれるだけでなく、読まれるためにも書かれているものなのだろうかという疑念が、今まさにこの「書く」という行為を通して自分自身に生じている。小さなシミとして何ふりかまわず自分の着想をなぐり書いておくこと。力みも生じず、気負うものもなく誰のことも気にせずに書くこと。否、ここまで尽くしても自分はこの胸のヒメゴトをまだ語ることはできない。ヴァルザーと彼の偉業を知ったとき、彼ほどこうした感情の動きについて究極的な所まで突き詰め切った人はいないのではないかと予感した。


文字をペンによって書く、という行為は今やとても衰退してきていて、——これに関しては、文字を早く「打つ」達人という形なり、なにか別の形によって人間はその未開の能力をいつでも垣間見せ得るという点で必ずしも自分は悲観的なだけではないにしても――サルトルが本の中でインクのシミにむきだしの実存が見出されるのだといくら読み手に語ったとしても、これからは彼のこの驚嘆はどこまで読者にとって切実に「不気味なもの(unheimlich)」として響くのだろうか。

つづく

「小さく書いていくことで露になる活字の群れそのもの或いはその生産過程を体験していく自分自身について(本体)」


カラフル☆万年カレンダー

もう三ヶ月ぐらい前にとある課題で作ったもの
期限迫って出力の方法がひどい。実装時間3~4時間。
初め普通に縦に表示させて書いて、そこから年間表示にするのに手間取った。
シェルのcalコマンドのソースはどこにありますかね。

Ruby環境前提で、下のソースを.rbで保存して、
$ruby hoge.rb
してね。からふるからふる。



-------------------cal.rb-----------------

# -*- coding: utf-8 -*-
##leap method##############
def leap(y)
if !( y % 100 == 0 )&&( y % 4 == 0)
l=1
else
l=0
end
return l
end
#################
####Cal Class####
#################
class Cal
def initialize(mput,yput,lput)
m = mput
@m = mput
@y = yput
@l = lput
@c = 1
end
def zeller
d = 1
m = @m
y = @y
#adjust jan,feb
if m<=2
m += 12
y -= 1
end
##zeller function
h = ((d+(26*(m+1))/10)+y%100+((y%100)/4)+(5*(y/100))+((y/100)/4))%7
if h==0
h=7
end
return h
end
##daymax method###########
def daymax
m = @m
l = @l
 date = Array.new(10)
 case m
   when 2
   if l==1
     for i in (1..29)
       date[i]= i
     end
   end

   if l==0
     for i in (1..28)
       date[i]= i
     end
   end
   when 4,6,9,11
     for i in (1..30)
       date[i]= i
     end


   when 1,3,5,7,8,10,12
     for i in (1..31)
       date[i]= i
     end
   end
return date
end
## put line methods  ########
def putl1
 ##color=>White
printf "\e[37m============================" ##l1 28行
end
def putl2
if @m >=10
printf"month:#{@m}                    " else
printf"month:#{@m}                     " ##l2 21spaces
end
end
def putl3
printf"\e[31m Sun\e[37m Mon Tue Wed Thu Fri\e[34m Sat\e[37m"
end
def putl4
printf"----------------------------" ##l4
end
def putl5
makel5(daymax, zeller)
end
def putl6
makel6(daymax, zeller)
end
def putl7
makel7(daymax, zeller)
end
def putl8
makel8(daymax, zeller)
end
def putl9
makel9(daymax, zeller)
end
def putl10
makel10(daymax, zeller)
end

##Make Line Methods l5~l9 ####
def makel5(date, h)
 l5 = Array.new(7)
 k = 1
 while k<h do
   l5[k] = "    "
   k += 1
 end
 while k <= 7 do
   l5[k] = date[@c]
   k+=1
   @c += 1
 end
 for q in 1..7
  if q ==1
  printf("\e[31m%4s\e[37m",l5[q])
  elsif q==7
  printf("\e[34m%4s\e[37m",l5[q])
  else
    printf("\e[37m%4s",l5[q])
    end
   end
end
def makel6(date, h)
 l6 = Array.new(7)
 k=1
 while k <= 7
   l6[k] = date[@c]
   k+=1
   @c += 1
 end
  for q in 1..7
  if q ==1
  printf("\e[31m%4s\e[37m",l6[q])
  elsif q==7
  printf("\e[34m%4s\e[37m",l6[q])
  else
    printf("\e[37m%4s",l6[q])
    end
   end end
def makel7(date, h)
 l7 = Array.new(7)
 k=1
 while k <= 7
   l7[k] = date[@c]
   k+=1
   @c += 1
 end
  for q in 1..7
  if q ==1
  printf("\e[31m%4s\e[37m",l7[q])
  elsif q==7
  printf("\e[34m%4s\e[37m",l7[q])
  else
    printf("\e[37m%4s",l7[q])
    end
   end end

def makel8(date, h)
 l8 = Array.new(7)
 k=1
 while k <= 7
   l8[k] = date[@c]
   k+=1
   @c += 1
 end
  for q in 1..7
  if q ==1
  printf("\e[31m%4s\e[37m",l8[q])
  elsif q==7
  printf("\e[34m%4s\e[37m",l8[q])
  else
    printf("\e[37m%4s",l8[q])
    end
   end end

def makel9(date, h)
 l9 = Array.new(7)
 k=1
 while k <= 7
   l9[k] = date[@c]
   k+=1
   @c += 1
 end
  for q in 1..7
  if q ==1
  printf("\e[31m%4s\e[37m",l9[q])
  elsif q==7
  printf("\e[34m%4s\e[37m",l9[q])
  else
    printf("\e[37m%4s",l9[q])
    end
   end end
def makel10(date, h)
 l10 = Array.new(7)
 k=1
 while k <= 7
   l10[k] = date[@c]
   k+=1
   @c += 1
 end
  for q in 1..7
  if q ==1
  printf("\e[31m%4s\e[37m",l10[q])
  elsif q==7
  printf("\e[34m%4s\e[37m",l10[q])
  else
    printf("\e[37m%4s",l10[q])
    end
   end end
end


##main##
puts "input the year"
y = gets.to_i
l = leap(y)
jan = Cal.new(1,y,l)
feb = Cal.new(2,y,l)
mar = Cal.new(3,y,l)
apr = Cal.new(4,y,l)
may = Cal.new(5,y,l)
jun = Cal.new(6,y,l)
jul = Cal.new(7,y,l)
aug = Cal.new(8,y,l)
sep = Cal.new(9,y,l)
oct = Cal.new(10,y,l)
nov = Cal.new(11,y,l)
dec = Cal.new(12,y,l)


jan.putl1; printf"=";
feb.putl1; printf"=";
mar.putl1; printf"=";
puts
jan.putl2; printf"|";
feb.putl2; printf"|";
mar.putl2; printf"|";
puts
jan.putl3; printf"|";
feb.putl3; printf"|";
mar.putl3; printf"|";
puts
jan.putl4; printf"|";
feb.putl4; printf"|";
mar.putl4; printf"|";
puts
jan.putl5; printf"|";
feb.putl5; printf"|";
mar.putl5; printf"|";
puts
jan.putl6; printf"|";
feb.putl6; printf"|";
mar.putl6; printf"|";
puts
jan.putl7; printf"|";
feb.putl7; printf"|";
mar.putl7; printf"|";
puts
jan.putl8; printf"|";
feb.putl8; printf"|";
mar.putl8; printf"|";
puts
jan.putl9; printf"|";
feb.putl9; printf"|";
mar.putl9; printf"|";
puts
jan.putl10; printf"|";
feb.putl10; printf"|";
mar.putl10; printf"|";
puts


apr.putl1; printf"|";
may.putl1; printf"|";
jun.putl1; printf"|";
puts
apr.putl2; printf"|";
may.putl2; printf"|";
jun.putl2; printf"|";
puts
apr.putl3; printf"|";
may.putl3; printf"|";
jun.putl3; printf"|";
puts
apr.putl4; printf"|";
may.putl4; printf"|";
jun.putl4; printf"|";
puts
apr.putl5; printf"|";
may.putl5; printf"|";
jun.putl5; printf"|";
puts
apr.putl6; printf"|";
may.putl6; printf"|";
jun.putl6; printf"|";
puts
apr.putl7; printf"|";
may.putl7; printf"|";
jun.putl7; printf"|";
puts
apr.putl8; printf"|";
may.putl8; printf"|";
jun.putl8; printf"|";
puts
apr.putl9; printf"|";
may.putl9; printf"|";
jun.putl9; printf"|";
puts
apr.putl10; printf"|";
may.putl10; printf"|";
jun.putl10; printf"|";
puts


jul.putl1; printf"|";
aug.putl1; printf"|";
sep.putl1; printf"|";
puts
jul.putl2; printf"|";
aug.putl2; printf"|";
sep.putl2; printf"|";
puts
jul.putl3; printf"|";
aug.putl3; printf"|";
sep.putl3; printf"|";
puts
jul.putl4; printf"|";
aug.putl4; printf"|";
sep.putl4; printf"|";
puts
jul.putl5; printf"|";
aug.putl5; printf"|";
sep.putl5; printf"|";
puts
jul.putl6; printf"|";
aug.putl6; printf"|";
sep.putl6; printf"|";
puts
jul.putl7; printf"|";
aug.putl7; printf"|";
sep.putl7; printf"|";
puts
jul.putl8; printf"|";
aug.putl8; printf"|";
sep.putl8; printf"|";
puts
jul.putl9; printf"|";
aug.putl9; printf"|";
sep.putl9; printf"|";
puts
jul.putl10; printf"|";
aug.putl10; printf"|";
sep.putl10; printf"|";
puts




oct.putl1; printf"|";
nov.putl1; printf"|";
dec.putl1; printf"|";
puts
oct.putl2; printf"|";
nov.putl2; printf"|";
dec.putl2; printf"|";
puts
oct.putl3; printf"|";
nov.putl3; printf"|";
dec.putl3; printf"|";
puts
oct.putl4; printf"|";
nov.putl4; printf"|";
dec.putl4; printf"|";
puts
oct.putl5; printf"|";
nov.putl5; printf"|";
dec.putl5; printf"|";
puts
oct.putl6; printf"|";
nov.putl6; printf"|";
dec.putl6; printf"|";
puts
oct.putl7; printf"|";
nov.putl7; printf"|";
dec.putl7; printf"|";
puts
oct.putl8; printf"|";
nov.putl8; printf"|";
dec.putl8; printf"|";
puts
oct.putl9; printf"|";
nov.putl9; printf"|";
dec.putl9; printf"|";
puts
oct.putl10; printf"|";
nov.putl10; printf"|";
dec.putl10; printf"|";
puts
3.times{
printf"\e[37m=============================\e[39m"
}
puts

覚書

ドイツ語による命題群: A1,A2,....An

命題群の連関によって形成される全体の文章 : ∪[1_n] Ai = G (命題群Aの和集合)


日本語による命題群: B1,B2,...Bm
命題群の連関によって形成される日本語全体の文章: ∪[1_m] Bk = J (命題群Bの和集合)

本来"語られるべき思想の本質"は、G ∩ J (GとJの積集合) の形として現れるのではないのか?
(というか原理的には、G∩Jにしか到達し得ないよね。日本語話者の僕らは)

さらに、

G,Jに含まれる各要素間のミクロな齟齬(統語的齟齬)
は生じたとしても、その集合たるGとJの間のマクロな齟齬(意味論的齟齬)
は最終的には起き得ないように思う。

δが統計的に有意になるサンプルの数だとするならば、
n,m < δ以下の場合(サンプルが有意な数よりも少ない場合)、確かに上記のようなGとJの齟齬は起きるかもしれない。

しかし、300ページを超えるような量を持つような文章において、我々は「意味論的齟齬が起きないように」読んでいくのであって、
GとJの齟齬が起きないような(すなわちこれがGとJの積集合)論に、収斂していくのではないか?


ドイツ語の原典にあたり、ドイツ語と日本語の統語的な齟齬を埋めていく作業は、必要で、意味のあることだと思う。
ただしそれは、起きる必要のない、小さな意味論的齟齬を未然に予防するための措置なのであって、
それをしないことによって、全く僕達が彼らの思考に追い付くことができないとは考えない。

こと体系だった思考の集合として存在することを志向する哲学において、言語的な可換性は思想家の望むるところであるはずだし。


数多の爆散を繰り返しながら、それでもこの戦争はいつか終わるはずだ、と彼の人は進む。

本当の戦線は文字と文字のその間隙に。終わることなき戦いに、盲目の信仰を以て臨め。


匿名でやってたブログから転載。無意味な文章かつ有意な数学的構造も持ちあわせていないのであしからず。