3월, 2011의 게시물 표시

자전거 타는 즐거움 - 김훈(소설가)

카드 회사에서 날라온 잡지의 첫 페이지에 소설가 김훈이 쓴 '자전거 타는 즐거움'이라는 제목의 수필이 두 페이지에 걸쳐 실려 있었다. 잡지는 머지 않아 버려질 것이다. 그래서 문장 몇개를 백업해 둔다. 자전거를 타고 달릴 때, 자전거의 바퀴는 외부의 사물이 아니라 내 몸의 일부다. 자전거의 바퀴는 자동차의 바퀴나 기차의 바퀴와 다르다. 자전거의 바퀴는 내 몸에서 돋아난 바퀴다. 내 몸의 힘으로 이 바퀴를 굴려서 앞으로 나아갈 때, 나는 자유를 느낀다. 비탈을 오를 때는 힘이 든다. 비탈을 오를 때 자전거의 기어는 내 몸의 힘을 바퀴 구동축으로 집중시키는 것이 아니라 오히려 반대로 힘을 잘게 부수어서 분산시킨다. 분산된 힘이 조금씩 체인의 베어링 속으로 흘러 들어가면, 자전거는 겨우 고개를 넘어간다. 자동차의 엔진은 오르막에서 힘을 증폭시키지만, 자전거의 기어는 힘을 잘게 나누어서 인간의 몸에 전달해준다. 자동차는 기계이고 자전거는 인간이기 때문에 오르막에서 힘을 쓰는 방식이 다르다.  - 김훈 (소설가) -

Javascript 객체의 특징

자바스크립트는 객체 지향 프로그래밍(OOP)를 지원하는 언어이지만 Java나 Python 등 다른 OOP 언어와는 개념이나 구현 방법에 있어서 차이가 있다. 특히 객체를 상속하는 방법은 다른 언어들과 많이 다르므로 눈여겨 봐야 한다. 우선 자바스크립트 객체의 특징을 알아보자. 이름과 값으로 구성된 프로퍼티의 집합이다. 연관 배열로서의 객체 for/in 루프를 사용하여 열거할 수 있다. 함수도 객체이다. 객체를 생성하는 방법은 여러가지가 있다. 객체를 구성하는 프러퍼티는 동적으로 삽입 또는 삭제가 가능하다. 모든 객체는 생성자 함수(constructor 프로퍼티)를 가진다. 모든 객체는 프로토타입이라 불리는 내장 객체를 참조한다. 상속은 프로토타입을 통해 구현된다. 그럼 일단 이 정도로 정리하고 각 항목별로 자세한 설명은 다음 포스팅에 계속.. * 편의상 '클래스'라는 용어를 사용했지만 자바스크립트2.0의 클래스와는 다르다. 자바스크립트2.0은 스펙상으로만 존재하며 개발이 중단되었다. 지원하는 브라우저 또한 없다.

자전거로 출퇴근 하기

4월이 다가오고 있다. 요즘처럼 날씨도 좋고 공기도 상쾌한 때에 제주도 살면서 자가용으로 출퇴근 한다는 건 젊은 나에 대한 예의가 아니다. 그래서 어제부터 자전거로 출퇴근을 하기 시작했다. 아이폰 유저로써 자전거앱을 찾아 본건 당연지사!! 유료앱도 좋은게 많지만 더 좋은 무료앱이 있었다. 바로 endomondo. $3.99 짜리 PRO 버전이 있긴 하지만 이걸로도 충분하다. http://www.endomondo.com/workouts/user/1056968 모든 데이터를 웹에서 볼 수 있으니까 너무 좋다. 아~~ 나도 이런 사이트 한번 만들어 보고 싶은데..

Javascript Code Conventions

Javascript의 코딩 스타일은 Java와 거의 같다. camelcase 를 사용하며 underscore 는 특별한 경우가 아니면 사용하지 않는다. 객체 정의를 위한 function의 이름 첫글자는 대문자로 쓴다. function Person(name, age) {     this.name = name;     this.age = age;     // ... } 들여쓰기는 공백문자 네개를 사용한다. tab은 에디터 또는 사용자마다 다를 수 있으므로 사용하지 않는다. tab을 사용하는게 공백문자 네개를 사용하는것 보다 파일 싸이즈는 줄어들 수 있지만 compress를 해버리면 차이가 없어 진다. 자바스크립트는 변수 선언에 자유로운 언어이다. 즉, 선언하지 않아도 할당할 수 있다. 하지만 가독성, 잠재적인 버그 방지를 위해 변수 선언은 해주는것이 좋다. var i = 10; (function () {     for( var i = 0; i < 5; i++ ) {         console.debug(i);     } })(); console.debug(i); // 10이 출력된다. 만약 var가 없다면 5가 출력된다. 한줄에 여러개의 변수를 동시에 선언 및 할당을 할 수 있지만 혼란을 주어서는 안된다. var height = 166, weight = 50; var firstName; var lastName; 자바스크립트로 프로그래밍을 하다 보면 들여쓰기 레벨이 복잡해지는 경우가 많은데 아래처럼 코딩하면 된다. var collection = (function () {     var keys = [], values = [];     return {         get: function (key) {             var at = keys.indexOf(key);             if (at >= 0) {                 return values[at];

나의 일

쌀쌀한 날씨지만 사장님과 직원들의 표정은 밝다. 장갑과 작업복은 시꺼멓다. 얼굴에도 기름때가 묻어 있다. 난로가 있는 사무실이 조그맣게 있지만 그곳에 앉아 있을 만큼 한가해 보이지 않는다. 나의 단골 카센터는 늘 그렇게 분주하다. 나는 컴퓨터 앞에서 일한다. 남자손이 거칠지 않고 보드랍다. 사무실 안은 여름에는 시원하고 겨울에는 따뜻하다. 그렇다 보니 때때로 졸립기도 하고 의자에 기대서 잠을 자기도 한다. 그리고 때때로 불평을 늘어 놓는다. .. 난 지금껏 내 주변에 나보다 편하게 일하는 사람을 보지 못했다.  카센터에 갈 때마다 드는 생각이다.

테트리스 AI

Javascript(jQuery)를 사용해서 테트리스를 만들어 보았다. 추가할 기능이나 일부 버그가 있긴 하지만 그럭저럭 해볼만 하다. >  테트리스 게임 해보기 이제 정말 해보고 싶은것은 바로 테트리스 AI(Artificial Intelligence). 어떤 알고리즘 혹은 가중치 계산법이 필요한지 간략히 정리해 보았다. 블록(테트리미노)을 drop했을때 바닥부분이 닿는 면적 전체 쌓은 블록의 높이 이를 고려하지 않으면 전체 블록이 무작정 높아질 수 있음 블록을 가로로 눕힐지, 세로로 세울지를 결정할 수 있음 clear 할수 있는 라인의 유무 또는 갯수 블록을 내렸을 때 빈공간으로 남을 수 있는 부분의 크기  이 정도만 계산할 수 있어도 테스트를 통해 최적의 가중치를 찾아낼 수 있지 않을까 싶다.