Free Hugs in KOREA

2006. 10. 19. 17:49
아.. 한국에서도 이런 것이 가능하구나.
동영상 마지막에 나온 문구가 인상적이다. 사랑, 미소, 행복... 조금의 용기가 필요할 뿐이다....
가까운 곳에서 사랑을 받고 있으면서도 나누지 못하고 사는 각박한 내 맘에 단비같은 기쁨을 주는 동영상이다.



당장 가까운 곳에서 용기를 발휘해야 겠다 :D

아래는 오리지널 동영상입니다.
,

Think Different

2006. 10. 15. 17:56
크게 기대를 하지 않고 시작한 책이지만 수월하게 읽어지면서도 기억에 남는 부분이 생기는 추천할만한 내용이었다.

모든 상황에 적용할만한 내용으로 "인간의 이성은 열정 앞에서 힘을 잃는다 - 아리스토텔레스" 라는 표현처럼 열정을 갖고 그것을 가진 사람들과 어울리고 배우려는 자세를 지닌다면 일단 시작은 될 수 있을 것 같다. 그것이 창의력을 개발하기 위해서건 무언가를 배우기 위해서건 간에, 이런 열정을 갖고 시작하면서 작은 성공에도 스스로를 칭찬할 수 있다면 위대한 성공에 접근할 수 있지 않을까?

이러한 열정을 가지고 지속적으로 연습,연습,연습 하는 동안 스스로 호기심에 항상 자극을 받을 만한 새로운 분야를 찾아서 도전하는 자세를 갖는 것이 중요하다고 이 책에서는 말하고 있다.

새로운 아이디어를 짜내기 위해 끙끙 댄다고 창의력이 향상되는 것이 아니다. 창의력을 개발하려면 단지 기존의 지식을 제거해버리면 된다.
좋은 것은 위대한 것의 원수다. - 볼테르
도입부에 과감히 등장한 문구들이다. 대체적으로 위대한 아이디어를 생각해내지 못하는 문제를 이런 좋은 것을 찾으려는데 있다거나, 기존 지식에 얽메여 있다는데서 문제를 찾고 있었다.

그럼 창의력이란 무었인가? 사실 이런 질문에 언뜻 대답하기가 어려울 것이라고 생각했는데, 저자는 생각보다 쉽게 정의해버렸다.
문제를 해결하는 능력이 바로 창의력이다.
다시말해서 문제가 있어야만 창의력을 발휘할 수 있다고 얘기하는 것인데, 사실 아무런 문제도 없는 상황에서 창의력을 불쑥 꺼내 든다면 당황스럽긴 하겠다.

어쨌든 이러한 창의력을 기를 수 있는 방법과 창의력을 가로막는 장애물을 식별하고 제거할 수 있다면 잠재해있는 무한한 창의력을 개발할 수 있을 것이다.

책에서 소개한 창의력 개발 방법과 이것을 가로막는 5가지 장애물에 대해서 정리해보면 다음과 같다.

창의력 개발 방법
  1. 100마일 사고법 (생각나는 대로 빠르게 아이디어를 떠올리는 것): 양과 속도를 결합한 사고방법.
  2. 180도 사고법 (전통적인 방식과 정 반대로 사고하는 방법) : 선입견과 고정관념에서 벗어나게해준다.
  3. 초은하계 사고법 (자기 일과 무관한 분야의 정보를 자신의 문제와 연결하려고 노력하는 방법) : 합리적인 사고, 즉 계속해서 똑같은 자료에만 의존하려는 틀에 박힌 사고를 없애고 좀더 많은 가능성을 열어줌

창의력을 가로막는 5가지 장애물

  1. 미지의 대상에 대한 두려움 (끊임없이 변화하는 세상에서 새로운 아이디어를 받아들이지 않고 현재에 안주한다면 실패할 수 밖에 없다)
  2. 바보처럼 보일지도 모른다는 두려움
  3. 성급한 판단
  4. 옛것에 대한 집착
  5. 성공에 대한 미련 (대단한 성과를 올린 사람 가운데에는 옛날의 영광에 사로잡혀 모든 상황에 적용되는 창의적인 해결책을 발견했다고 생각하는 사람이 많다)

모든건 항상 실천이 문제다... 내일 당장 아니 오늘 당장 실행하는 것이 중요 하다.

,

나름 독서 방법 정리

2006. 10. 10. 19:24
집중력을 높이기 위해서 (다독이 목적)...
한권의 책을 읽는데 데드라인은 3일 정도로 한다

이것 또한 집중력을 높이기 위해서...
읽고 나서는 나름대로 독후감 내지는 서평을 기록한다

시간내기가 어려우니 일부러 이렇게 제약을 걸어 보는 것은 어떨지...
짜투리 시간에만 읽는다

워낙 관심사가 다양하고 싫증을 잘내는 타입이라. 오랬동안 집중력을 갖고 보기 위해서...
한번에 여러권을 읽는다

읽기, 읽기, 읽기 ... 절대적으로 양이 중요한 것은 아니지만, 그렇다고 안 중요 한 것도 아니다. 도무지 1년에 100 - 150 권씩 읽어대는 사람들은 뭐란 말인가?
좋은 책을 선별해 내는 안목을 기르기에는 아직도 내공이 많이 부족하니 주변 좋은 소스들로 부터 추천 받은 책들은 짬짬히 계속 읽어보자.
,

티스토리로 이주중

2006. 10. 9. 13:36
그동안 blogger.com -> wordpress.com 등으로 이사다니다가. 이제 급기야 티스토리에 도달하는 지경에 이르렀다. 글쎄 악필이 붓 탓하는 것은 아니라 하지만, 새로운 도구가 나에게 활력을 불어넣어 주는 건 사실이다.

기존에 사용하던 블로그 서비스에서 문제가 되었던 것은 무었일까? 이전에 사용했었던 두군데 모두 "내 맘대로" 부분이 조금은 미흡했던 것 같다. 2% 부족함을 느꼈던 때문인지는 몰라도, 뭔가 땡기는 것이 생기면 바로 옮겨가야지 하고 노려보던 찰나에 평소에는 눈여겨 보지 않던 국내 서비스중에 티스토리가 눈에 들어오게 되었다.

부족한 부분을 티스토리가 충분히 채워줄 것인가? 라는 질문에는 지금은 언뜻 답할 수는 없지만 벌써부터 이래저래 데이타를 이전할 방법을 찾아보는 걸로 봐서는 조만간 메인 블로그로 사용하게 될 것 같은 생각이 든다. 그리도 티스토리에 애책을 갖고 시작할 수 밖에 없는 요인중 또하나는, 너무나도 얻기 힘든 계정 ㅡㅡ;;; 이런 것도 무시못할 요인이다. (정말 힘들게 얻은 것 같다... 하여간 계정을 만들게 해준 dongki님에게 감사하는 맘을 가지면서)

이제 또다시 시작이다.
,

자바스크립트로된 라이브러리 혹은 프레임웍 들을 살펴보다보면 눈엣 가시처럼 거슬리는 코드들이 보인다. 평소에 보지못한방식이라서 그럴 수도 있고, 워낙 고수들이 만들어놓은 자바스크립트 고유의 장점들을 살려서 작성해놓았기 때문일 수도 있다.

어쨌든 그중에 자바스크립트를 생성할때 네임스페이스를 구현하는 방법 등을 둘째 치더라도 (보면 그냥 이해가 되는 부분이기도 하니까) 왜 이런 라이브러리들은 프로토타입 객체를 통해서 함수들을 선언해 놓을까?

가장 큰 이유는 개인적인 생각에서는 메모리의 문제가 아닐까 한다. 물론 다른 이유도 많겠지만...

메모리의 측면에서 보기위한 예를 들면:

[CODE]

function mySample() {

var field1 = "test";

var today = new Date();

this.todayis=function(){

alert("Today is " + this.today);

}

}

[/CODE]

위와 같은 함수가 있다고 생각해보자. 이때 todayis 라는 함수는 오늘 날짜를 alert 창으로 찍어서 보여줄 것이다.이런식으로 mySample 함수 생성 메소드 내부에 함수를 추가하는 방식을 사용하는 경우에는 mySample 객체의 인스턴스가생성될때 마다 매번 함수를 새로 만드는 형태가 된다. - 객체를 대량으로 만드는 경우에는 메모리 사용면에 있어서 취약할 수 있다.

이런 고려사항때문에 대부분 Prototype 객체를 사용해서 함수를 연결하는 형태를 취하고 있는 것으로 생각된다.
하지만 Prototype 을 사용하는 경우에 주의해야 하는 사항은 가비지 문제이다.

함수내부에 함수를 추가한 형태의 경우에는 내부적으로 클로저가 만들어진 경우인데 (클로저는 함수 내부에 또 다른 함수를 구현하는 경우에만 동작한다), 이때 생성 메소드에서 DOM 엘리먼트를 다루는 경우에는 함수의 지역 변수로 선언된 내용이 가비지 컬렉터에게 수집되지 않는 문제점이 발생할 수 있다.

쩝... 여러가지고 JavaScript 코드를 사용해서 뷰단에서 멋진 효과및 이벤트 처리를 위해서는 많은 고려해야할 사항이 있는 것 같다.

,

JavaScript 로 본 MVC 모델

2006. 9. 12. 13:35

보통 웹어플리케이션을 구현하는 과정에서 항상 나오는 얘기는 MVC 패턴으로 뷰와 모델, 컨트롤러를잘 분리해서 개발을 해야한다 라는 것이다.

이런 과정에서 지금껏 아무생각 없이 자바스크립트 언어를 사용해오던 방식 - 자바스크립트를 화면 랜더링,property변경, form유효성검증 등의 HTML 의 보조용도로 사용해 오던 것 - 이 아니라, 화면 계층의 메인 프로그램언어로서 사용하게 됨으로써 점점 복잡한 스크립트 언어를 사용하게 되고 요즘에서는 Ajax 라는 용어로 요약되는것 처럼, 잘못된스크립트 코드의 남용은 곧바로 유지보수가 거의 불가능한 스파게티 코드를 양산해내게되고 있다.

일단 자바스크립트라는 것을 이해하는 차원에서 위의 MVC 모델을 적용해서 이해해볼 필요도 있겠다. 약간은 억지스런 느낌도 있지만, 이렇게 이해하면 나름대로 머릿속에 쏙쏙.. 들어오는 느낌을 가질수 있겠다.

코드 예

[CODE]

function sample(id, element){

this.id = id;

this.div = element;

this.div.onclick = this.clickHandler;

}

[/CODE]

위와 같은 함수를 만들었다고 생각하자. 이경우 각각 모델, 뷰, 컨트롤러에 해당하는 부분은 어떻게 적용할 수 있을까?

1. 모델 : sample 이라는 객체 자체가 일종의 모델이라고 할 수 있다. id 와 div 속성을 가지고 있는 모델.

2. 컨트롤러 : 모델의 div 객체의 onclick 이벤트를 처리하는 함수가 clickHandler 라고 연결 되어 있는데, 이때 이벤트를 처리하는 이 clickHandler 라는 함수가 컨트롤러라고 생각할 수 있다.

3. 뷰 : sample 함수를 호출할때 넘어오는 객체 element 는 뷰단에서 이벤트를 발생시킨 객체를 의미한다. element라는 파라미터로 넘어온 객체가 뷰라고 할 수 있다.

이렇게 자바스크립트 코드내에서도 MVC 를 적용해서 생각한다면 스크립트 내에서 이벤트를 처리하는 함수를 구현하거나 이해할 때 혼란스러운 부분을 줄일 수 있을 것 같다.

즉 브라우저가 동작하는 방식에서 이해해본다면 브라우저는 DOM 엘리먼트를 클릭하는 경우 해당 이벤트의 처리 함수의컨텍스트로 DOM 엘리먼트를 지정하게 되고 이 이벤트의 정보를 담은 Event 객체를 생성해서 인자로 넘겨주게 된다는 의미.

,

Tear Drop 일냈다 !!!

2006. 9. 12. 10:36

호세 밴드가 드디어 세상에 더욱 널리 알려지려나보다.

이번 Rocket 2006 Fest 에서 당당히 1등을 차지한 그룹 Tear Drop !!! ㅎㅎㅎ 아래 링크에 가서 1등 그룹의 음악을 들어보시라 ~~~

1등 수상소식

음악은여기

싸이 홈페이지

,

Spring MVC 셈플 코드 연습중 첫번째 문제..

뷰와 컨트롤러를 분리하기 위해서 JstlView 클래스를 사용해서 분리하려고 테스트 하다가 아래와 같은 오류가 발생하였다.

2006-07-02 20:25:16 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZ)V
at org.apache.jasper.compiler.TagLibraryInfoImpl.createAttribute(TagLibraryInfoImpl.java:568)
at org.apache.jasper.compiler.TagLibraryInfoImpl.createTagInfo(TagLibraryInfoImpl.java:401)
at org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:248)
......

쩝 이리저리 설정을 봐도 잘못된 곳은 없었는데, 문제점은 servlet.jar 파일을 클래스 패쓰에 넣어두었던 것 때문에 발생하는 것이었다.

위와 같은 문제가 발생하면 클래스 패쓰에 servlet.jar 또는 struts.jar 같은 파일이 잡혀있는지 주의 깊게 살펴보자.

,

MoinMoin - UnicodeDecodeError

2006. 6. 19. 14:06

모인모인 사용시 UnicodeDecodeError가 발생하는 경우 페이지가 제대로 안열리는 경우가 생길수 있다.

이때 몇몇 파일에서 except 처리를 해주면 잘 나타나게 되는 경우도 있으니 아래 파일들을 변경해보자.

~/site-packages/MoinMoin/logfile/editlog.py

<code>
try:
hostname = socket.gethostbyaddr(host)[0]
- except socket.error:
+ hostname = unicode(hostname, config.charset)
+ except (socket.error, UnicodeError), err:
hostname = host

remap_chars = {u'\t': u' ', u'\r': u' ', u'\n': u' ',}
</code>

~/site-packages/MoinMoin/logfile/logfile.py 48 line 근처.

<code>

# Decode lines after offset in file is calculated
try:
self.lines = [unicode(line, config.charset) for line in self.lines]
except UnicodeError:
self.lines = [unicode(line, "iso-8859-1") for line in self.lines]

</code>

,

GET / POST 무지한 사용에 대한 위험성

2006. 6. 8. 07:15

Pragmatic AJAX 라는 책을 읽고 있는 중이다. 여러가지 DHTML , AJAX 등에 대한 내용이 담기 책은참 많은데, 이 책을 읽는 동안 여러가지 공감및 생각하게 만드는 꺼리등이 많은것 같다.

아직 다 읽은 건 아니지만, 오늘 버스안에서 읽은 내용중 (상당히 토할껏 같았다) 일부인데, 그동안 개발해오면서 이런방향으로 고민을 한번도 해보지 않았던 .... 내가 당했다면 상당히 당황했었을 교훈을 얻은 것이 있어서 정리해보고자 한다.

그동안은 웹어플리케이션을 만들더라도 폐쇄적인 내부에서만 사용되는 비즈니스 어플리케이션들을 위주로 만들다보니 이런 경우를 당한적이 한번도 없었지만, 책에서 저자는 직접 당한뒤에 깨달음을 얻은 사례를 설명해주고 있다.

웹어플리케이션 제작시 GET/POST 방시을 아무생각없이 혹은 데이타의 사이즈때문에 혹은 파라미터를 감춰달라는 요구 등등 때문에 구분해서 사용해오진 않았는가?

이렇다면 이 책에 나온 얘기가 앞으로 닥칠 황당한 일을 미연에 방지해줄 수 있을테니 꼭 숙지해야 할 것 같다.

[책내용]

웹어플리케이션을 만들어놓고 어느날 고객으로부터 데이타가 마구 사라진다는 얘기를 들었다고 한다. 원인 분석을 해본즉...구글 악셀러레이터때문이었다는 결론을 얻었다는데, 이유는 대부분의 검색엔진 로봇들이 그러하듯이 인덱싱/캐싱을 해서 좀더 빠르게검색 결과를 내보내기 위해서, 페이지내에 있는 링크들을 빠르게 마구 엑세스 하면서 일종의 클릭을 해보는데, 이때 존재하는링크중에 서버의 데이타를 변경/삭제 시키는 링크가 불행히도 "GET" 방식으로 되어있다면 ....

구글 악셀러레이터가 인덱싱하면서 해당 기능을 수행하는 결과를 초래하는 경우가 발생하는 것이다. 이러면 데이타가 사라지기도 하겠다 ㅡㅡ;;

어쨌건 결론은 서버에 뭔가 데이타를 변경시키는 역할을 하는것은 반드시 POST 로 하라는 얘기였다....

외부로 노출되는 서비스를 개발하는 사람이라면, 한번더 생각해볼 얘기다.

,