회사의 도서관에서 특정 분야에 대한 책을 다른 분들에게 추천해주는 북셀렉터 활동을 완료했다.
1년동안 북셀렉터들과 도서관 담당자와 한달에 한번씩 모여서 책에 대한 후기를 서로 공유했다.
내가 맡은 부분은 운영체제였고, 운영체제 관련한 책에 대해서 보고 공유하면서 들었던 생각들을 정리차 작성한다.

운영체제라는 주제를 서비스개발자, 디자이너, 기획자에게 설명하는 것이 너무 어려웠다. 커널이나 알고리즘을 얘기하는 것은 피드백을 주거니 받기 어려운 부분이었다. 게다가 책을 추천하는 것은 그보다 더 어려운 것이었다.  왜 운영체제라는 것이 필요한지 조차도 모르는 분들을 설명하기란 굉장히 어려웠다. 초반에 기술 서적을 설명할 때 'Hard core'라는 단어를 쓰면서 나를 위안했다. 그러나, 시간이 지나면서 상대방을 이해시키려 하지 말고 좋은 마음으로 볼 수 있도록 하는 방법이 생각이 났다. 

PPT와 유투브 동영상을 이용해서 리눅스OS에 대해서 어떤 것인지 보여주었지만, 디자이너, 기획자, 서비스개발자의 표정들이 동감대가 이루어지지 못했다. 어려운 개념을 설명하려고 쉬운 개념이 필요하다는 생각이 들었다. 즉, 눈에 들어오는 제품을 직접 만들어 가지고 가서 왜 운영체제가 필요한지를 설명하였다. 특히 나는 리눅스 OS와 C/Java언어 계통을 좋아하는 까닭에 내가 잘 할 수 있는 것들을 찾아보았다.

처음에는 안드로이드 폰이었다. 안드로이드폰을 직접 들고 가서, 북셀렉터 모임에서 안드로이드 OS에 대한 개괄적인 설명과 아키텍처를 설명하였다.


(이미지는 구글 검색후 찾아낸 것음. 내용과 무관함. 출처 : http://ss.textcube.com/blog/3/31048/attach/XaBhtFDQSb.jpg)


다들 스마트폰을 쓰고 있어서 그런지 안드로이드 OS에 대해서 그렇구나 정도로 설명을 진행했다. 반응이 미비했지만, 마음이 움직일 수 있겠다하는 생각이 들었다.

누구나 쉽게 운영체제를 좀 더 이해할 수 있는 방법이 없을까 하는 생각이 들었다. 운영체제를 깊게 이해하기 보다는 기존의 펌웨어 방식의 특징을 얘기하고 운영체제가 필요하게 되었나를 설명하면 좋겠다는 생각이 들었다. 사실 나도 책으로만 공부했지, 왜 운영체제가 필요한 것인지에 대해서 깊이 생각해본 적은 없었던 부분도 있었다.

중고 레고 마인드스톰을 35만원을 주고 구매했다. 비싸게 주고 샀지만 이런 기기를 언제 만져볼까 싶기도 하면서도 누군가에서 재미있는 설명을 해준다면 좋을 것 같아서 구매했다.


(이미지 출처 : http://ecx.images-amazon.com/images/I/618DwmMkOQL._SL500_AA300_.jpg)


( 펌웨어의 의미는 상당히 고급스러운 데, 이 문서에서는 단순히 어플리케이션처럼 바이너리를 넣은 개념으로 이해하면 좋을 듯)

북셀렉터 모임 때 마인드스톰 로봇에 프로그래밍을 하고 업로드 한후, 안드로이드 OS의 블루투쓰 콘트롤 어플을 이용해서 자유자재로 움직이는 로봇을 시연했더니 반응이 아주 좋았다. 그 다음 달에도 레고 마인드스톰을 이용하여 겉표면에 나와있는 로봇을 만들어서 혼자 흔들어대도록 만들어서 보여주었더니 역시 반응이 좋았다. 
이것저것 시연을 하면서 프로그래밍한 바이너를 저장한 펌웨어의 특징과 펌웨어 형태로 개발하는 것의 한계를 얘기할 수 있었다. 

"펌웨어는 한번에 한가지만 할 수 있다. 바로 마인드 스톰의 특징이라고 할 수 있다. 동작하게 하는 CPU와 작은 메모리로 센서를 인풋으로 삼아 다양한 동작을 가능케 한다.
그러나 동시에 여러개를 할 수 있으려면 운영체제의 개념이 필요하다. 즉 프로세스(일) 관리가 필요한 것이고, 프로세스를 관리하려면 메모리를 침범하지 않도록 보호를 해야 한다. 또한 어느 한 프로세스가 소홀히 되지 않도록 다양한 방법(알고리즘)이 필요한 것이라고 얘기했다. 또한 무엇을 하면서도 언제든지 내가 원하는 일을 바로 처리해 줄 수 있도록 하는 큰 개념을 운영체제라고 얘기했다. "



사람들이 조금씩 운영체제를 이해할 수 있었다. 눈에 보이는 레고 마인드스톰을 가지고 깊이 이해할 수 없었지만, 왜 운영체제가 필요한 것인지를 이해시키는 부분을 설명을 했다. 디자이너, 기획자들이 바로 반응이 왔다.

그 다음은 아두이노 였다. 아두이노는 마인드스톰과 달리 6-8만원 정도로 가격이 쌌고, digital input/output port가  많다보니 좀 살 것 같았다. 마인드 스톰은 레고 블럭으로 로봇 만드는 것은 바쁜 나에게 힘든 경험이었다.



(이미지 출처 : http://arduino.cc/en/uploads/Main/arduino_uno_test.jpg)


아두이노는 리눅스 운영체제를 탑재할 수 없다. 그러나 펌웨어 기반으로 동작할 수 있고, 조금만 할애하면 누구나 쉽게 멋진 예술작품을 만들 수 있기 때문에, 소개하면 좋겠다는 생각이 들었다. 또한 나는 ARM 에 대해서 깊이 알 수 있겠다는 생각이 들었다. 오픈 하드웨어, 오픈 소스를 표방하고 있기 때문에 코드를 볼 때마다 즐거웠다.

아두이노를 가지고 다양하게 시연를 해주었다. 센서. LED, MIDI 스피커, 화이트 캐릭터  LCD를 가지고 폭탄 만들기 시연, LED 방식으로 다양한 효과를 선보이니 역시 반응이 좋았다. 작은 기계에서 다양한 기능을 가지고 재미있는 일을 할 수 있는 것에 호기심을 내비쳤다.

1기 활동을 끝마치고 나서 그들에게 더 좋은 것을 보여줄 수는 없었다. 그러나 소통하는 것이 무엇인지를 조금씩 깨달았다. 기대감과 호기심을 자극시킴으로서 공감과 참여를 이끌어내는 것이 즐거웠던 것 같다. 다들 웃으면서 다양한 얘기를 해주실 때마다 고마움을 느꼈다. 그리고, 아래와 같은 솔직한 얘기를 했다.

운영체제는 항상 필요한 것은 아니다. 필요한 곳에 쓰일 수 있는 소프트웨어이지, 모든 것에 만능은 아니다.
또한  완벽한 운영체제를 만드는 것은 쉽지 않다. 어떤 곳은 펌웨어로, 어떤 곳은 운영체제로 쓰일 수 있을 것이다.



어려운 주제인 운영체제를 공감하기 위해서 사비을 지불했다. 사람들이 어려워하는 주제에 대해서 이해를 조금 높일 수 있도록 노력했다는 점은 잘했다고 생각이 든다. 그러나 눈에 보이지 않은 부분은 도외시 하지 않았나 하는 생각이 들었다. 공감대를 갖도록 하기 위해서 눈에 보이는 것 위주로 하지 않았나 생각을 한다.


기술서적에 대한 북셀렉터 활동을 하면서 배운 것을 정리해 본다.

첫번째, 어려운 주제라도 쉽게 설명할 수 있는 방법이 있다. 그것을 찾아내는 과정에서 많은 고민과 고통이 있을 수 밖에 없다. 상대방이 무지를 존중하자. 그것은 내가 설명할 수 있는 방법을 제공한다. 상대방을 쉽게 이해시키고 동감대를 만들어 낼라면 2배를 고민하고 노력하자.

두번째, 소통의 방법 중 하나는 눈으로 보여주는 것이다. 실제의 현상, 기술이 100%라면 책에서 보여주는 것은 30% 미만이다. 책의 한계를 인정하고 책에서 보여주고 싶었던 그림을 내가 소화하고 보여주자. 완벽하지 않더라도 개념을 현실로 만들어 놓자.

세번째, 쉬운 것부터 시작하자. 쉬운 것부터 시작하니 점차 어려운 것도 쉽게 해낼 수 있는 방법이 생긴다. 정말 시작은 반인 것 같다. 말만 하지 말고 정말 작은 발걸음부터 떼자.


마지막으로 책이란 무엇인가? 라는 하는 물음이 내안에 든다.
'책은 현상에 대한 아무 일부에 대한 모습을 보여주는 거울이다' 라는 생각이 든다.
언젠가 또 다시 바뀌겠지만.. ^^



Posted by '김용환'
,

<서론>

Webwork 개발자가 webwork를 떠나 struts2로 이동하면서 webwork, ognl, sitemesh가 좀 버려진(?) 상태로 있었습니다.그러나 Apache 진영또는 오픈 소스쪽에서 webwork, ognl, sitemesh가 다시 생명력을 가지고 다시 일어서려는 분위기가 있다는 Trend를 알리고자 합니다.

요즘 Webwork 진영은 어떻게 돌아가는지 트렌드를 잠깐 소개하고자 합니다. 내용의 레퍼런스는 apache common dev 메일링 리스트입니다.

 

 

<본론>

Webwork(struts2), OGNL, Sitemesh를 세부적으로 보도록 하겠습니다.

1. Webwork-Struts2

Webwork는 장렬히 전사했지만,  Struts2에서 webwork의 모든 개념을 포함하여 열심히 만들어주고 있습니다.

최신 버전에 잘  release 되고 있습니다.

 

2. Webwork의 core library OGNL

OGNL은 Webwork MVC의 core library 였으며, 지금도 Struts2의 중요 라이브러리입니다.

또한 이 OGNL은 Apache 프로젝트 중의 일부이며 Spring Webflow까지 영향을 주는 라이브러리입니다.

2011년 초 OGNL에 마지막 남은 commiter(Lukasz)가 Apache Common 개발자 리스트에 도움을 요청하였습니다. 원래 개발자들도 ASF로 소스 이전하는 것에 대해서 찬성했지요. Common쪽에서 이를 지원하기 위해서 투표를 했고,  통과하였습니다.

 

- Apache Struts

- Apache Tapestry

- Apache Camel

- Apache Tiles

- MyBatis (formerly Apache iBATIS)

- Spring WebFlow.

 

ONGL은 incubator에서 벗어나 당당히 4.0 snpahost 버전을 공개하며 일어서고 있습니다.

Last Published: 01 November 2011  | Version: 4.0-SNAPSHOT

http://commons.apache.org/ognl/

 

 

3. Sitemesh

Sitemesh는 2까지 나오고 그동안 활동이 없었는데, Sitemesh 3가 나오게 되었습니다. 아직은 alpha 버전이긴 하지만, 조만간에 beta 릴리즈 계획이 있다고 합니다.  하지만 올해 초까지만 활동하고 지금은 조용한 상태입니다.

http://www.sitemesh.org/

Sitemesh 3의 특징 중 중요하게 바뀐 것은 다음과 같습니다.
- sitemesh의 내부 구조를 바꿔 기존보다 3배 이상의 속도와 메모리를 반 정도로 적게 쓸 정도로 함
- jsp나 velocity 없이 바로 static html로 생성할 수 있다.
- 기존보다 간단한 설정
 

4. 구글 트렌드 조사

 

webwork가 죽는 것 같았지만, 다시 살아나고 있는 트렌드입니다.

 


 

그리고, 중국진영에서 열심히 쓰고 있습니다.

 

 

 

OGNL은 여전히 힘을 잃고 있기는 하지만, 중국에서 장난아니게 사용되고 있음을 볼 수 있습니다.

 

 

 

 

<결론>

Webwork, Sitemesh, OGNL 오픈소스를 지원했던 OpenSymphony 가 사라졌지만, 그의 후예들이 계속 노력해서 새롭게 변화하고 있다는 것을 조사하면서 기분이 좋았습니다. 좋은 프레임웍은 계속 살아남는구나 하는 생각이 들었습니다.

최근에는 중국 사용자들이 OGNL에 많이 참여하고 있으며, 중국어 페이지를 개설하려는 움직임이 있으며 활발하게 제안하며 활동하고 있습니다.

그것을 보면서 어쩌면.. 중국 또는 아시아권에 의해서 webwork(struts2)/ognl/sitemesh 개발 붐이 일어날 수 있겠구나 하는 생각이 들었습니다. 

 

 

 

참고자료

 

http://wiki.apache.org/incubator/OGNLProposal

http://www.opensymphony.com/ognl/

https://github.com/sitemesh/sitemesh3/wiki

http://www.sitemesh.org/overview.html

Posted by '김용환'
,

Mongo DB

OS concept 2011. 12. 12. 23:52

2011년 11월 infoq에 mongo DB에 대한 글이 하나 실렸다. 

http://www.infoq.com/news/2011/11/MongoDB-Criticism

주로 아래 두개의 글을 참조해서 만들어진 것이다. 
- http://blog.schmichael.com/2011/11/05/failing-with-mongodb/
-  http://pastebin.com/raw.php?i=FD3xe6Jt

글에 따르면, mongo db의 한계로 지적한 내용은 다음과 같다.  
- global write lock으로 인한 성능 문제
- 이상한 replication에 따른 데이터 손실 (레코드 손실)
- 부하가 많은 상황에서의 샤딩, replication 문제
- 데이터셋을 몽땅 날리는 문제
- recovery가 안되는 문제


mongo DB가 nosql 에서는 가장 잘 나가고 있는데,
초기 버전이다 보니 scale과 replication 부분에서 다양한 문제들을 만나면서 버그들이 나오는 것 같다.
어서 빨리 안정화가 되길.. 10gen 화이팅~


'OS concept' 카테고리의 다른 글

구글 크롬 OS 30분 맛보기  (0) 2011.05.20
Endian 유래  (0) 2006.07.20
임베디드 시스템의 기본 #1  (0) 2006.07.20
실시간 운영체제 종류  (0) 2006.01.23
Synchronization primitives  (0) 2005.02.28
Posted by '김용환'
,


<시작>
아두이노와 프로세싱을 가지고 이것 저것 해보면서, 굳이 프로세싱 (processing) 언어의 경우는 굳이 processing ide를 쓰지 않아도 되겠다 하는 생각이 들었다. 그래서 윈도우에서 이클립스환경에서 쉽게 개발할 수 있도록 셋팅을 해보았다. 이렇게 한다면, 이클립스 + 아두이노로만 개발이 가능해 지고 쉽게 개발할 것이다.

기존에 했던 작업
http://knight76.tistory.com/entry/아두이노-프로세싱-연동-어플에서-버튼을-누르면-불-깜빡거리게-하기
http://knight76.tistory.com/entry/프로세싱-언어가-자바-언어로-변환


<본론>
프로세싱과 아두이노와 연동했던 소스를 참조해서 만들어본다.
"http://knight76.tistory.com/entry/아두이노-프로세싱-연동-어플에서-버튼을-누르면-불-깜빡거리게-하기"

아두이노 소스는 그대로 사용한다.

이제 프로세싱에 해당되는 것만 이클립스 환경에서 쓸 수 있게 한다.
다운받은 프로세싱 (processing) 패키지의 리소스를 잘 이용하여 Referenced Libraries 에 추가한다.

1. 프로젝트 생성
자. 이제 이클립스 프로젝트를 새로 생성한다.
그리고, 속성-Java Build Path를 지정한다.
UI만 쓸꺼면, 프로세싱 설치 디렉토리의 serial.jar만 추가하면 된다. 그러나 나는 serial 통신까지 하는 예제이기 때문에 조금 신경써야 한다. ^^

2. Build Path 추가
프로세싱 디렉토리의 lib 디렉토리의 core.jar (ui 담당), jna.jar를 build path에 추가한다.
그 다음 modes\java\libraries\serial\library 디렉토리의 RXTXcomm.jar와 serial.jar 을 build path에 추가한다.

3. Serial.dll 복사
제일 중요한 것은 serial 통신을 위한 dll 파일이다. 이 파일은 아주 다행히 프로세싱 설치 디렉토리에 있다.

설치 디렉토리의 modes\java\libraries\serial\library\windows32 디렉토리에 있는 rxtxSerial.dll 파일을
c:\windows\system32에 복사한다.

만약 rxtxSerial.dll 파일이 존재하지만 않으면, 다음의 에러가 발생한다.

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
     at java.lang.Runtime.loadLibrary0(Runtime.java:822)
     at java.lang.System.loadLibrary(System.java:993)
     at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
     at processing.serial.Serial.list(Serial.java:549)
     at Springer.setup(Springer.java:33)
     at processing.core.PApplet.handleDisplay(PApplet.java:1390)
     at processing.core.PGraphics.requestDisplay(PGraphics.java:690)
     at processing.core.PApplet.run(PApplet.java:1562)
     at java.lang.Thread.run(Thread.java:613)
Error while running applet.
java.lang.RuntimeException: Error inside Serial.ports()
     at processing.serial.Serial.errorMessage(Serial.java:583)
     at processing.serial.Serial.list(Serial.java:564)
     at Springer.setup(Springer.java:33)
     at processing.core.PApplet.handleDisplay(PApplet.java:1390)
     at processing.core.PGraphics.requestDisplay(PGraphics.java:690)
     at processing.core.PApplet.run(PApplet.java:1562)
     at java.lang.Thread.run(Thread.java:613)







4. 클래스 생성
마지막으로 클래스를 생성한다.

import processing.core.PApplet;
import processing.serial.Serial;

public class SketchTest extends PApplet {
 Serial port;
 boolean button = false;
 int x = 150;
 int y = 150;
 int w = 100;
 int h = 75;

 public void setup() {
  size(400, 400);
  println("Available serial ports:");
  println(Serial.list());
  port = new Serial(this, Serial.list()[1], 9600);
 }

 public void draw() {
  if (button) {
   background(255);
   stroke(0);
  } else {
   background(0);
   stroke(255);
  }

  fill(175);
  rect(x, y, w, h);
 }

 public void mousePressed() {
  if (mouseX > x && mouseX < x + w && mouseY > y && mouseY < y + h) {
   button = !button;
  }

  if (button == true) {
   // turn on led
   port.write(255);
  } else {
   // turn off led
   port.write(0);
  }
 }

 static public void main(String args[]) {
  PApplet.main(new String[] { "--bgcolor=#F0F0F0", "SketchTest" });
 }
}






5. 클래스를 실행한다.
Run Application, Run Applet 다 되니 상관없다.


6. 애플리케이션 테스트를 한다.



<결론>
동작 아주 잘된다. 깜빡~ 깜빡~









USB 씨리얼 통신을 이클립스에서 자바 언어로 연동을 쉽게 할 수 있다는 점은 상당히 앞으로 창의력을 키워줄 것이다.


<참고>
관련된 라이브러리 추가 (win 32 기준)

Posted by '김용환'
,

arduino와 processing을 연동 하면서, processing 언어가 어떻게 자바로 바뀌는지 궁금했다.

export application 하니 win32, win64 에서 동작할 수 있도록 코드가 생성된다. windows32 디렉토리와 window64 디렉토리가 생기고, 각각 lib, source 디렉토리와 serial 통신이 가능한 dll파일과 exe 파일이 생긴다. 

자바소스는 source디렉토리에 보니 processing언어로 된 원래 코드와 변환된 자바 코드가 있다. 

기존 코드는 다음과 같다. 

 import processing.serial.*;
 Serial port;


boolean button = false;

int x = 150;
int y = 150;
int w = 100;
int h = 75;

void setup() {
  size(400,400); 
  
  // 디버그 
 println("Available serial ports:");
 println(Serial.list());
 // 내 pc 에는 Serial 내부 구조의 1번에 com3로 연결된 아두이노가 있다. 
  port = new Serial(this, Serial.list()[1], 9600);  
}

void draw() {
  if (button) {
    background(255);
    stroke(0);
  } else {
    background(0);
    stroke(255);
  }
  
  fill(175);
  rect(x,y,w,h);
}


void mousePressed() {
  if (mouseX > x && mouseX < x+w && mouseY > y && mouseY < y+h) {
    button = !button;
  }  

// 버튼의 값이 true이면 led을 끼고, false이면 led를 끈다.
  if (button == true) {
    // turn on led
     port.write(255);
  } else {
    // turn off led
    port.write(0);
  }
}
 


자동으로 변환된 자바 코드이다. 


import processing.core.*; 
import processing.xml.*; 

import processing.serial.*; 

import java.applet.*; 
import java.awt.Dimension; 
import java.awt.Frame; 
import java.awt.event.MouseEvent; 
import java.awt.event.KeyEvent; 
import java.awt.event.FocusEvent; 
import java.awt.Image; 
import java.io.*; 
import java.net.*; 
import java.text.*; 
import java.util.*; 
import java.util.zip.*; 
import java.util.regex.*; 

public class sketch_dec08a extends PApplet {

 
 Serial port;


boolean button = false;

int x = 150;
int y = 150;
int w = 100;
int h = 75;

public void setup() {
  size(400,400); 
  
  // \ub514\ubc84\uadf8 
 println("Available serial ports:");
 println(Serial.list());
 // \ub0b4 pc \uc5d0\ub294 Serial \ub0b4\ubd80 \uad6c\uc870\uc758 1\ubc88\uc5d0 com3\ub85c \uc5f0\uacb0\ub41c \uc544\ub450\uc774\ub178\uac00 \uc788\ub2e4. 
  port = new Serial(this, Serial.list()[1], 9600);  
}

public void draw() {
  if (button) {
    background(255);
    stroke(0);
  } else {
    background(0);
    stroke(255);
  }
  
  fill(175);
  rect(x,y,w,h);
}

public void mousePressed() {
  if (mouseX > x && mouseX < x+w && mouseY > y && mouseY < y+h) {
    button = !button;
  }  
  
  if (button == true) {
    // turn on led
     port.write(255);
  } else {
    // turn off led
    port.write(0);
  }
}

  static public void main(String args[]) {
    PApplet.main(new String[] { "--bgcolor=#F0F0F0", "sketch_dec08a" });
  }
}




PApplet을 상속받은 클래스를 하나 만들고, PApplet의 method를 override 하도록 되어 있다. 
이렇게 만들어진 PApplet 을 바로 쓰면 애플릿으로 바로 쓸 수 있고,
main 메서드만 추가하면 어플리케이션처럼 쓸 수 있도록 짜 있다. 전형적인 어플 개방 방식을 쓰고 있다.  


lib/core.jar 파일에 processing.core.JApplet 클래스가 존재한다.  JApplet 클래스는 java.awt.Applet 을 상속하고, java.awt의 이벤트 계열 리스너와 쓰레드를 상속해서 쓰고 있다. 

public class PApplet extends Applet  implements PConstants, Runnable, MouseListener, MouseMotionListener, KeyListener, FocusListener {
...
}

lib/args.txt 파일을 보니, 클래스이름과 jar 파일 classpath가 적힌 것 같다. 

lib/RXTXcomm.jar 파일을 살펴보니. gnu.io 패키지를 가지고 있다. serial 통신을 지원하는 library인데 정체가 무엇일까 하는 생각이 들었다. http://users.frii.com/jarvi/rxtx/ 웹 페이지에 자세한 설명이 있다. 이 라이브러리는 LGPL 라이선스 이고 java에서 사용할 수 있도록 만들어진 serial, parallel 통신 library이다. 
이 페이지는 old 해졌고, http://rxtx.qbang.org/wiki/index.php/Main_Page 페이지가 최신 소개 페이지이다. 
serial port 통신에 대한 얘기들과 예제들이 있다. java로 쉽게 개발할 수 있도록 고생하셨다. 짝짝~


생각보다 processing의 원리가 무척 간단하다는 생각이 들었다. 단순히 java 언어로 변환하고, library만 지원하는 구조가 아닌가 생각이 든다. 그래서 예술가들이 processing 언어를 쓰는 것 같다. 

Posted by '김용환'
,

파워포인트 발표자 도구 를 어제 처음 보고 신기해 했는데, 다들 이미 알고 있었다. ㅠㅠ
파워포인트 발표자 도구를 설정하는 방법을 공유한다.


프레젠터에 d-sub를 꽂고 내가 하고 싶은 얘기를 할 때, 나는 거의 외워서 했다.
사실 그럴 필요가 없었다.  발표자 도구 표시를 하면 다음의 이미지처럼 잘 나와서 편하게 얘기할 수 있었다...
ㅠㅠ




어떻게 하나 찾아보니. '슬라이드쇼'->'슬라이드 쇼 설정' 을 선택한다.




쇼 설정에서 슬라이드 '쇼를 표시할 모니터'에서 모니터를 선정-> '발표자 도구 표시'를 check on 으로 한다.



잘 나온다.



파워포인트 좋구나~ ㅋㅋㅋ
Posted by '김용환'
,



아두이노 보드에 이렇게 구성한다. 
8번 포트를 아웃푹으로 지정





아두이노 소스 




const int ledPin = 8;      // the pin that the LED is attached to

void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  byte brightness;

  // check if data has been sent from the computer:
  if (Serial.available()) {
    // read the most recent byte (which will be from 0 to 255):
    brightness = Serial.read();
    // set the brightness of the LED:
    analogWrite(ledPin, brightness);
  }
}




프로세싱 소스

(원 소스는 http://www.learningprocessing.com 에서 있으며, 그림 예제에서 일부를 수정해서 만들었음)

 import processing.serial.*;
 Serial port;


boolean button = false;

int x = 150;
int y = 150;
int w = 100;
int h = 75;

void setup() {
  size(400,400); 
  
  // 디버그 
 println("Available serial ports:");
 println(Serial.list());
 // 내 pc 에는 Serial 내부 구조의 1번에 com3로 연결된 아두이노가 있다. 
  port = new Serial(this, Serial.list()[1], 9600);  
}

void draw() {
  if (button) {
    background(255);
    stroke(0);
  } else {
    background(0);
    stroke(255);
  }
  
  fill(175);
  rect(x,y,w,h);
}


void mousePressed() {
  if (mouseX > x && mouseX < x+w && mouseY > y && mouseY < y+h) {
    button = !button;
  }  

// 버튼의 값이 true이면 led을 끼고, false이면 led를 끈다.
  if (button == true) {
    // turn on led
     port.write(255);
  } else {
    // turn off led
    port.write(0);
  }
}





여기서 약간 나는 머리를 썼다.
LED를 재미있게 만들었다. 원래 선물받은 제품인대, 꼬마 전구가 문제가 생겨서 못쓰고 있었다.
(사실 나는 "손에 잡히는 아두이노" 책에서 영감받아 나만의 재미있는 것을 만들려던 참이었다.)









꼬마 전구 대신 간단한 LED를 이용했다. 그리고 간단하게 테이프를 붙였다.
(.  원리는 무척 간단한데, 이런 제품을 구하기 가 어렵다는 게 있다. )

그리고 아두이노에 연결했다

처음에는 검은 바탕으로 있다. 꺼져있다. 





가운데 버튼을 눌러주면 환하게 켜진다. 




그렇게 복잡하지는 않지만, pc에서 아두이노를 다룬다는 것은 재미있다. 복잡한 프레임워크나 어려운 코드를 쓰지 않아도 내가 원하는 것을 할 수 있다니 매력이 있다. 

흐흐.. 이제 점점 장난감으로 갈 것 같다. 


Posted by '김용환'
,

아두이노를 다룰 때, 아두이노 자체에서만 동작하는 "Arduino software(아두이노 소프트웨어)"만 써왔다.
pc에서 아두이노 기기를 다룰려면, 드라이버를 이용해서 코딩해야 한다. 
찾아보니 Visial Studio에서 연동하는 게 있기는 한데..
간단하게 동작되는 것만 하고 싶었는데. Processing(프로세싱) 이라는 툴 및 언어를 이용하면 될 것 같다. 
(프로세싱 언어가 자바랑 비슷한 문법을 하고 있다. 자바 개발자에게는 어쩌면 딱이다.)

프로세싱은 UI 및 아두이노와 serial 통신을 책임져준다. 


"손에 잡히는 아두이노" 책에서 간단히 소개할 때는 그런가 보다 했는데..
조금씩 이해하면서 접근해야지. 


설치 
http://processing.org/download/ 에 접속해서 1.5.1 를 다운받는다. 
 

 


UI Loo& Feel 은 꼭 아두이노 소프트웨어처럼 생겼다. 하지만 거의 자바와 비슷한 문법을 취하고 있다. (사실 내부는 jvm을 사용하고 있다.)


실제 돌아가는지 테스트해본다. 

http://arduino.cc/en/Tutorial/Dimmer




다음과 같이 설정한다. 



아두이노 소프트웨어에 다음의 코드를 넣는다.  


const int ledPin = 9;      // the pin that the LED is attached to

void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  byte brightness;

  // check if data has been sent from the computer:
  if (Serial.available()) {
    // read the most recent byte (which will be from 0 to 255):
    brightness = Serial.read();
    // set the brightness of the LED:
    analogWrite(ledPin, brightness);
  }
}




프로세싱 코드


SERIAL 포트 중에 연결되어 있는 녀석으로 수정해야 한다. 
내 pc에는 1번 값에 com3로 arduino로 연결되어 있어서 1로 수정했다.  


 import processing.serial.*;
 Serial port;
 
 void setup() {
 size(256, 150);
 
 println("Available serial ports:");
 println(Serial.list());
 
 // Uses the first port in this list (number 0).  Change this to
 // select the port corresponding to your Arduino board.  The last
 // parameter (e.g. 9600) is the speed of the communication.  It
 // has to correspond to the value passed to Serial.begin() in your
 // Arduino sketch.
 port = new Serial(this, Serial.list()[1], 9600);  
 
 }
 
 void draw() {
 // draw a gradient from black to white
   for (int i = 0; i < 256; i++) {
   stroke(i);
   line(i, 0, i, 150);
   }
 
 // write the current X-position of the mouse to the serial port as
 // a single byte
 port.write(mouseX);
 }
 



그리고, processing 코드를 돌려보면 검은색 부분으로 마우스를 이동하면 LED가 꺼지고,
밝은 색 부분으로 마우스를 이동하면 LED가 켜진다. 




좋은 Reference 

http://www.arduino.cc/en/Tutorial/HomePage
http://processing.org/learning/
http://www.learningprocessing.com
http://www.cre8ive.kr/blog/2009/02/27/arduino-processing-%EC%97%B0%EB%8F%99/
책 - "손에 잡히는 아두이노"



Posted by '김용환'
,


php와 동시에 java를 하나로 묶는 소스에서 개발하는 이클립스 환경 셋팅이다.

1. php eclipse 설치

phpeclipse(http://www.phpeclipse.com) 는 죽어가고 있는 듯 제외하고, 이클립스 공식 싸이트를 이용
http://www.eclipse.org/projects/project.php?id=tools.pdt

버전은 2011년 6월에 나온 PDT 3.0을 이용하기로 결정했다.
15 Jun 11 PHP Development Tools 3.0 Release Review 
http://www.eclipse.org/pdt/downloads/

php와 eclipse가 동시에 내장되어 있는 방식을 이용하기로 했다.
"These downloads include Eclipse 3.7.1 and PDT 3.0.2" 선택

http://code.google.com/p/zend-sdk/downloads/list 여기주소로 들어가서
eclipse-php-3.0.2.v2011102768-Win32.zip를 다운로드 했다.

\php-development 디렉토리에 extract 하고, eclipse-php\eclipse-php.exe 파일을 실행하여 eclipse를 실행

workspace는 아래와 같이 지정.
\php-development\eclipse-php\workspace

자바 빌더 자체가 없어서 java  소스에 대해서 에러가 발생한다.

2. Subversion client 설치  

이클립스 subversion client 인 subversive plugin을 설치한다.
eclipse3.7은 helios 이니, Install ->
    http://download.eclipse.org/releases/helios 등록 -> Collaboration  -> subversive로 시작되는 것 모두
설치


3. java 빌드

이클립스 자동 자바 컴파일을 위해서 http://download.eclipse.org/releases/helios 위치에서 java ee developer tools 플러그인을 설치한다.





 

'Web service' 카테고리의 다른 글

카산드라(Cassandra)가 ivy에서 maven으로 바꾼 이유  (0) 2011.12.15
Webwork(Strust2), OGNL, Sitemesh  (0) 2011.12.13
gcDaemonProtection false 설정  (0) 2011.11.17
리눅스(ubuntu)에서 XE 1.5.0_4 beta 설치  (0) 2011.10.11
Nginx  (9) 2011.09.27
Posted by '김용환'
,



드디어 2011.11.30일 아두이노가 1.0으로 Release 되었다. 짝짝~
1.0의 의미가 크다.


http://arduino.cc/en/Main/ReleaseNotes
http://arduino.cc/blog/2011/11/30/arduino-1-0-now-available/


1. .pde 확장에서 .ino로 변경
2. icon 및 color 변경
3. 시리얼 디버깅이 비동기화 처리 (Serial transmission is now asynchronous)
4. SD 메모리의 다중 파일 지원
5.  write(), print(), println() 가 size_t 타입의 값을 리턴
6. Client, Server, UDP에 대한 base class 추가
7. Ethernet 라이브러리의 DHCP, DNS 지원
8. SoftwareSerial 라이브러리 추가


설치해서 써보니. 기존에 비해서 획기적은 없다. 포트 번호가 우측에 나오니 조금 좋아졌다.
나머지는 쓰면서 테스트해봐야지..


 

Posted by '김용환'
,