반응형


rect(0, 0, 50, 50);   //White rectangle
pushMatrix();
//기준점으로 부터 30,20 만큼 이동하여 그려준다
translate(30, 20);
fill(0); 
rect(0, 0, 50, 50);   //Black rectangle
//다시 원점으로 부터 거리 계산하여 그려준다
popMatrix();
fill(102); 
rect(15, 10, 50, 50); //Gray rectangle

//푸시와 팝매트릭스는 결국 짝을 이루어야 사용가능
//아래는 푸시와 팝 매트릭스 설명
//Pops the current transformation matrix off the matrix stack.
//Understanding pushing and popping requires understanding the concept
//of a matrix stack.
//The pushMatrix() function saves the current coordinate system to the stack
//and popMatrix() restores the prior coordinate system. pushMatrix()
//and popMatrix() are used in conjuction with the other transformation
//methods and may be embedded to control the scope of the transformations

주석을 지웠다 써가며 테스트 해보는것이 도움이 될듯하다

반응형
반응형

import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup()
{
  size(400,400);
  frameRate(25);
 
  oscP5 = new OscP5(this, 12000);
 
  //ip와 포트번호를 가지고 있는 netAddress이다.
  myRemoteLocation = new NetAddress("127.0.0.1",12000);
}

void draw(){
  background(0);
}
void test1()
{
 // String s = "Test11 ";
  background(100,100,0);
  text(72,20, 80);
}
//마우스 이벤트
void mousePressed()
{
  OscMessage myMessage = new OscMessage("/test");
 
  myMessage.add(123);
  myMessage.add("hello");
 
  oscP5.send(myMessage, myRemoteLocation);
}

//메세지 리시브

void oscEvent(OscMessage theOscMessage) {
// draw1();
print(" addrpattern: "+theOscMessage.addrPattern());
}

간단한 예제이다.
소켓통신을 공부했다면 어느정도 이해가 되는 소스
oscP5 라이브러리가 도데체 뭔가 하고 헤맷었는데.
이미 내가 알고있는 사이트에서 만든 라이브러리였다.
아 진짜 바보.
약자라는걸 왜 눈치를 못챘지?

반응형
반응형

독학하는것도 좋긴한데,
시간이 오래걸린다는게 문제...

가격이 부담되긴 한데,
생각해봐야지.



http://music.dongguk.ac.kr/mmjw/


 
반응형
반응형
아 정말 바보인가..ㅡ.ㅡ열라 헤멨다.

Getting Started에 나온 대로 그대로 했는데 뭐가 잘못되었을까,하며 짜증을 내려던 찰라
경모형이 왔다.
차근차근 내가 했던 행동들을 하나씩 보여주면서 하니,
실수했던 부분들이 있었다.
아 영어..ㅡ.ㅡㅋ

http://www.onar3d.com/mother/
우선 저기방문할것.

To get the included examples running, follow the following steps:

1. Copy Gradient.jar and Waltz.jar to wherever you want to keep your synths.

->하드드라이브에 아무데나 폴더 생성하고 거기에다가 이 파일을 넣으면된다
나는 c:\synths 를 만들고 거기에 파일 세이빙

2. Update mother.ini to refer to that path, eg: SynthFolder=X:\\Stuff\\My Synths;
   Also create subfolders "data" and "libraries",
   e.g. X:\Stuff\My Synths\data and X:\Stuff\My Synths\libraries.

->이것땜에 고생했다.
워드패드로 열어야 수정이 쉽다, 노트패드로 열어서 괜한곳에 경로를 수정하고있었음
아까 만들어준 폴더의 경로를 입력
c:\\synths;


3. Running example controller:

   Max/MSP Windows:
    Start "Mother_Controller_Example - 0.3.exe",
       and make sure to allow it through any firewalls you have,
       or it will not be able to communicate with Mother.

->난 윈도우 사용자로써, 저거 파일 실행해줬음..ㅋ

   OSX:
    Download Max/MSP runtime from www.cycling74.com,
    and use it to open the included "Mother_Controller_Example - 0.3.mxf" file.

   Pure Data Alternative:    
    Download and install Pure Data extended from: http://puredata.info/downloads,
    and open the pd patch "PureData controller example.pd",
    included with this Mother distribution. 
->여기서 이걸 빼먹고 갔다...
OSX사용자만 보라는건줄 알고...ㅡㅠ
어쨌든 저 사이트가서 퓨어데이터 다운받아서
실행후->파일 읽어준다

4. Start Mother.exe, add an instance of each synth using the controller example buttons,
   and try out the various adjustments.
->Mother.exe실행
MAX/MSP에서 이런저런 값들을 변경해주면 된다.

5. Read the included documentation, documentation related to using OSC (http://opensoundcontrol.org/),
   and get started making your own synths and user interfaces for controlling them!

If it doesn't work right away:

    * Make sure you are pointing mother to a valid filepath for the synths,
      and that you are using the double backslash '\\' in the path.
     
    * Make sure you graphics card and the installed drivers support OpenGL 2.0
   
    * Make sure the communication between the controller and Mother is not blocked by a firewall,
      and that the network ports specified in Mother.ini are available.
   
    * Email me at onar3d@hotmail.com :)

exception.
그라디언트가 잘 실행이 안되는거 같아서
라이브러리
C:\Stuff\Synths\libraries
에 colorutils geomutils  jar파일을 넣어주니 잘 되네염^^
반응형
반응형

[펌] http://kr.blog.yahoo.com/minandclub/folder/20.html
========================================

제약조건 (Constraint)


  제약조건이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러 가지 규칙을 적용해 놓는거라 생각하면 됩니다. 간단하게 테이블안에서 테이터의 성격을 정의하는 것이 바로 제약조건 입니다.

 ★ 데이터의 무결성 유지를 위하여 사용자가 지정할 수 있는 성질 입니다.

 ★ 모든 CONSTRAINT는 데이터 사전(DICTIONARY)에 저장 됩니다.

 ★ 의미있는 이름을 부여했다면 CONSTRAINT를 쉽게 참조할 수 있습니다.

 ★ 표준 객체 명명법을 따르는 것이 좋습니다.

 ★ 제약조건은 테이블을 생성할 당시에 지정할 수도 있고, 테이블 생성 후 구조변경(ALTER)명령어를
     통해서도 추가가 가능합니다.

 ★ NOT NULL제약조건은 반드시 컬럼 레벨에서만 정의가 가능합니다.


NOT NULL 조건
: 컬럼을 필수 필드화 시킬 때 사용합니다.


SQL> CREATE TABLE emp(
        ename VARCHAR2(20)  CONSTRAINT emp_nn_ename NOT NULL );
        이런식으로 하면 ename 컬럼에는 꼭 데이터를 입력해야만 합니다.

        여기서 emp_nn_ename은 (테이블이름_제약조건이름_컬럼이름) 형식으로
        CONSTRAINT NAME을 정의 합니다.

        CONSTRAINT NAME은 USER_CONSTRAINTS 뷰(VIEW)를 통해서 확인할수 있습니다.

SQL> SELECT CONSTRAINT_NAME
         FROM    USER_CONSTRAINTS
         WHERE  TABLE_NAME ='EMP' ;

          CONSTRAINT_NAME
          -----------------------
          emp_nn_ename           이런 식으로 제약사항의 이름을 확인할수 있습니다.
 



UNIQUE 조건
:
데이터의 유일성을 보장(중복되는 데이터가 존재할수 없습니다.)
자동으로 index가 생성됩니다.    


SQL> ALTER TABLE emp
        ADD CONSTRAINT emp_uk_deptno UNIQUE (deptno) ;

테이블이 변경되었습니다.

     이런식으로 하면 deptno 컬럼에 중복된 데이터가 들어갈 수 없습니다.

-- 제약 조건의 삭제

SQL>ALTER TABLE emp
       DROP CONSTRAINT emp_uk_deptno ; 

테이블이 변경되었습니다.
 



CHECK 조건 :
컬럼의 값을 어떤 특정 범위로 제한할 수 있습니다.


SQL>ALTER TABLE emp
       ADD CONSTRAINT emp_ck_comm
       CHECK (comm >= 10 AND comm <= 100000) ;

테이블이 변경되었습니다.

     comm컬럼은 체크조건에서 제한을 하고 있으므로 1에서 100까지의 값만을 가질수  있습니다.
     
체크 조건에서는 IN 연산자를 사용할수 있습니다.


-- 제약 조건의 삭제

SQL>ALTER TABLE emp
        DROP CONSTRAINT emp_ck_comm ;

테이블이 변경되었습니다.

SQL> ALTER TABLE emp
        ADD CONSTRAINT emp_ck_comm
        CHECK (comm  IN  (10000,20000,30000,40000,50000)) ;

테이블이 변경되었습니다.

     comm 컬럼은 10000,20000,30000,40000,50000의 값만을 가질수 있습니다.
 



DEFAULT
(컬럼 기본값) 지정 : 데이터 입력시에 입력을 하지 않아도 지정된 값이 입력될수 있습니다.

SQL>CREATE TABLE emp(   
        hiredate DATE DEFAULT  SYSDATE ) ;

     이런식으로 하면 hiredate 컬럼에 INSERT를 하지 않아도 오늘 날짜가 들어갑니다.



PRIMARY KEY 지정
: 기본키는 UNIQUE 와 NOT NULL의 결합과 같습니다.

  ※  기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서
       외래키들이  참조할 수 있는 키로서의 자격을 가지고 있습니다. 이를 참조 무결성이라 합니다
.  

       UNIQUE 조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성하며
       그 이름은 기본 키  제약 조건의 이름과 같습니다.


INDEX KEY
: 검색 키로서 검색 속도를 향상 시킴니다.
                   (UNIQUE,PRIMARY KEY 생성시 자동적으로 생김니다.)

SQL>CREATE TABLE emp(
        empno NUMBER CONSTRAINT emp_pk_empno PRIMARY KEY ) ;

     이런식으로 하면 empno 컬럼에 UNIQUE 제약조건과 NOT NULL제약조건을 가지게 됩니다.



 FOREIGN KEY(외래 키)지정
: 기본키를 참조하는 컬럼 또는 컬럼들의 집합입니다.

※ 외래키를 가지는 컬럼의 데이터 형은 외뢰키가 참조하는 기본키의 컬럼과 데이터형이
    일치해야 합니다.
    이를 어기면 참조무결성 제약에의해 테이블을 생성할수 없습니다.

외래키에 의해 참조되고 있는 기본 키는 삭제할수 없다.

ON DELETE CASCADE 연산자와 함께 정의된 외래키의 데이터는  그 기본키가 삭제 될 때 같이
    삭제됩니다.


SQL>ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno
        FOREIGN  KEY (deptno) REFERENCES dept(deptno)        

테이블이 변경되었습니다.

 이런식으로 하면 emp 테이블의 deptno 컬럼은 dept 테이블에 deptno 컬럼을 참조하는
 외래키를 가지게 됩
니다.

직접 변경해 보세요..

 


제약 조건의 확인

USER_CONS_COLUMNS : 컬럼에 할당된 제약 조건을 볼 수 있습니다.
USER_CONSTRAINTS : 유저가 소유한 모든 제약 조건을 불 수 있습니다.  
이 두개의 데이터사전을 참조 하면 됩니다.
 
 SQL> SELECT  SUBSTR(A.COLUMN_NAME,1,15) COLUMN_NAME,  
               DECODE(B.CONSTRAINT_TYPE,
                                         'P','PRIMARY KEY',
                        'U','UNIQUE KEY',
                      'C','CHECK OR NOT NULL',
                                        'R','FOREIGN KEY') CONSTRAINT_TYPE,  
              A.CONSTRAINT_NAME   CONSTRAINT_NAME  
        FROM  USER_CONS_COLUMNS  A,  USER_CONSTRAINTS  B  
        WHERE  A.TABLE_NAME = UPPER('&table_name')  
            AND  A.TABLE_NAME = B.TABLE_NAME  
            AND  A.CONSTRAINT_NAME = B.CONSTRAINT_NAME  
        ORDER BY 1;  

-- 테이블 명을 입력 하면 됩니다.
table_name의 값을 입력하십시오: emp2

 
COLUMN_NAME         CONSTRAINT_TYPE   CONSTRAINT_NAME
------------------------------ ----------------- --------------
DEPTNO                   CHECK OR NOT NULL      SYS_C001362   
                               FOREIGN KEY                EMP2_FK_DEPTNO
EMPNO                     PRIMARY KEY               EMP2_PK_EMPNO
ENAME                     CHECK OR NOT NULL     EMP2_NN_ENAME
MGR                        UNIQUE KEY                  EMP2_UP_MGR
반응형
반응형


1주일동안 배운 내용을 토대로 미니 메신져를 구현하였다.

파이프를 생성하여 두 프로그램간의 데이터를 패킷전송하였다.

간단한 예제였지만, API를 배우고 있는 입장에서는 조금 난해하기도 하였다.


기존에 만들고 있던 P2P 프로그램을 수정하여 만들어서 빨리 만들수 있었다.

주의사항으로는 데이터를 팩킹하여 보내주고 그것을 받는 부분이였다.


void *TransReq::MakeAPacket(int *pbdlen)
{
 MsgHead *mh = MakeHead(TRANS_REQ);
 int bdlen =0;
 void *pack =0;

 int SendMsglen = strlen(SendMsg)+1;


 pack = ehenpack(pack,bdlen,&SendMsglen,sizeof(SendMsglen));
 bdlen += sizeof(SendMsglen);
 
 pack = ehenpack(pack,bdlen,SendMsg,SendMsglen);
 bdlen += SendMsglen;

 mh->bodylen = bdlen;
 bdlen = sizeof(MsgHead) + bdlen;

 void *tpack = pack;//
 pack = ehenpack(mh,sizeof(MsgHead),pack,bdlen);
 
 free(tpack);//

 *pbdlen = bdlen;
 return pack;
}

실습했던 파일까지 첨부~!!


처음 알았던 부분.
패킷헤드를 만들어서 그곳에 패킷에 대한 정보를 주는 부분!!
잊지말것.

반응형

+ Recent posts