Archive for the ‘プログラム’ Category

技術者素養のあるデザイナ:デザイナ素養のある技術者

火曜日, 11月 16th, 2010

 
昼間みたツイートに対するなにか。
なんかいろいろ思ってサラっと返せなかったので。
 
 
 
元になる記事はこちら:http://okude.blogspot.com/2010/11/sat-nov-13.html
山中俊治さんのデザインと自分の関わり的な記事。
 
いろんな突起があってそれぞれ引っかかりたいところですがー、
 
とりあえず、デザインとエンジニアリングという観点で、
さらに僕の場合はソフトウェア9割の生活だということを前提でおねがいします。
(ハードは大学でやった日曜工作に毛が生えた程度の作品制作しかない)
 
 
※結果ちゃんと考えがまとまらなかったのですが、
 いい機会なので雑文として書き留めました。
 
 
 
– – – –
現状、デザインするしプログラム組むしという人が少ないと思っている。
 
 
出来るというのは、
プログラマーとAPIの仕様を決め、
デザイナーとビジュアルの詰めの話をしコンマ以下のピクセルの話をし、
Windowsディスプレイの色空間に文句を言い、
インタラクションやモーションの主張をする、そういうひと。
 
 
 
実際世の中には、それこそ日本語圏をでれば、全然たくさんいるのかも知れない。
ただ、僕の世界はいまのところそんなに広くないので、
仕事上の話でよく不足してる感じを受ける。
 
 
でも、上記のブログ記事にある、
現在働いている技術者とデザイン(主にビジュアル)の話をいかにしていくか、
という論点からは少しずれてしまうのだけど、
そこで必要とされている(僕が今不足しているなと思う)人材は、
今後ちゃんと増えていくんじゃないだろうか。
 
 
僕は、何をする人間に育つにしても、憧れと好奇心がキモだと思っていて、
その個人的な感覚のなかでいえば、
きっかけとしてビジュアル的に美しいものに感動して、
それが物理や計算式で出来ていてエレガントな気がして、
それが自分の手でも作れるんだ!、そういう流れを組んだひとなるんじゃないかなと。
 
 
 
プログラムに最初に触れるのって、
例えば僕の世代でいえば小学校、中学校でだと思うんですが、
CやBASICそのものの仕組みに興味を持ってスクリプトを書き始めるのではなく、
HTMLやらJS、Flash等、ビジュアルをつくるためにスクリプトを組むところから
始まっている人は、両方のセンスが育っているのではないだろうか。
 
 
そういう意味で、ActionScript2.0までのFlashというのは
とても良かったと思っている。普通買えないけどそれはまぁいろいろ(ry
 
ビジュアルオブジェクトを配置して、タイムライン上でトゥイーンつけて、
かなり大雑把なスクリプトをくっつけて、いいバランスで、
なにか面白かったり、綺麗だったりするものが作れた。
 
 
 
10年前は、そういう環境がなかったけれど、徐々にそういうところから
プログラムに入ってくるルートが増えてきて、今はかなりある。
 
ので、”技術者にとって何がデザインの余地なのかわからない” のは
一世代上までの話のような気がしないでもないなーと思います。
 
いろんなライブラリが出まわったり、個人からでも入り込める市場ができたり、
小規模な開発でも回っていく部分が出てきているので、そういううちは、とりあえずね。
 
 
 
 
とりとめないのでこのへんで。
 
 
 
 
あ、でもひとつ。
この話に出てくるような人は、器用貧乏みたいな状況になりがちだと思う。 
 
 
さらにもひとつ。
Macintoshから入ったほうがいろんなセンスよくなる確率が高い気がする。
 
 
– – – –
RTでいただいたフレーズですが、
“イタリアでは昔は飛行機や車はエンジニアリングとデザインが分けがたく存在していた”
という話はなんだかときめく。紅の豚が思い浮かんだ。
 
 

アルゴリズム:重複しないランダムな数値を配列で取得

木曜日, 11月 4th, 2010

ちょいちょい使うんでメモ。
# 今回はこちらから拝借
http://por.s54.xrea.com/lab/230/

これはActionScript用みたいですが、アルゴリズム的にはなんでも使えるよね。
早いとか遅いとかは分からないですけど…

var rndList:Array = [];
rndList = randomList(10);

// 整数を重複なしにランダム取得
function randomList(max:Number):Array
{
	var inList:Array = [];
	var outList:Array = [];
	var j = 0;
	var rndValue;
	
	for (var i=0; i<max; i++)
		inList[i] = i;
	
	var inListL = inList.length;
	while (inListL)
	{
		rndValue = Math.floor( Math.random() * (max-j) );
		outList[j] = inList.splice( rndValue, 1 );
		j++;
		inListL = inList.length;
	}
	return outList;
};

 
 
2010.12.01 追記:
Objective-C の場合。
intのNSArrayが作れなくて焦った。
NSIntegerはオブジェクトじゃないですよ、NSNumberじゃないとダメですよ。

NSMutableArray *rndList	= [[NSMutableArray alloc] initWithArray:[self randomList:10]];

- (NSMutableArray*)randomList:(int)max
{
	NSMutableArray *inList	= [[NSMutableArray alloc] init];
	NSMutableArray *outList	= [[NSMutableArray alloc] init];
	int j = 0;
	int randomNumber = 0;
	
	for (int i=0; i<max; i++)
	{
		NSNumber *nsNum = [NSNumber numberWithInt:i];
		[inList insertObject:nsNum atIndex:i];
	}
	
	// 現在の日時を用いて乱数を初期化する
	srand([[NSDate date] timeIntervalSinceReferenceDate]);
	
	int inListL = [inList count];
	while (inListL)
	{
		randomNumber = rand() % (max-j);
		
		NSNumber *nm_ = [inList objectAtIndex:randomNumber];
		[outList addObject:nm_];
		[inList removeObjectAtIndex:randomNumber];
		j++;
		inListL = [inList count];
		NSLog(@"%d:%d",inListL,[nm_ intValue]);
	}
	return outList;
}