FA 테트리스 - MSX용 테트리스


   


저 대학 때 방학 생활은 단순했습니다. 겨울 방학에는 개발 프로젝트를 하나 정해서 프로그램 만들기... 잡지에 기고하거나 팔거나 했습니다. 그리고 여름에는 두문불출하고 오락하기... Ultima 2,3,4,5, Bard's Tale, Times of Lore, 2400 AD, Autodual, Ogre, Might & Magic, Neuromancer... 공부에 전혀 취미가 없던 제가 그나마 영어단어 몇 가지 알게 된 것이 이 오락들 덕분이죠. 정말 다시 돌아가고 싶습니다. 군대만 아니면... ㅡ.ㅡ;

좌우간... 이 프로그램은 MSX에서 돌아가는 테트리스입니다.

제가 대학 2년(89년도) 겨울방학 때 친구와 둘이서 만들었습니다. 배경음악 루틴은 친구가 만들어 줬습니다. 제가 만든 것이 있었는데 그 친구가 만든 것이 더 좋아서 빌렸지요. 지금은 컴파일이라는 회사를 운영하는 사장님... 배경음악 작업은 이 게임을 출시한 회사에 놀러 오던 재능 있는 친구가 수고해줬구요.

프로그래밍은 한 달 정도 소요되었는데 상품화 과정에서 비쥬얼 때문에 2-3개월 더 들어갔습니다. 전 초기 비쥬얼을 좋아했는데 출시할 회사 사장님께서 심한 거부감을 느끼고 계셔서 여러 번 작업했었습니다.

개발 언어는 당연히 Z80 어셈블러... 주로 공부하던 언어는 6502 어셈블러였는데 갑자기 오래 몸 담고 있던 Apple을 떠나 MSX로 기변을 하는 바람에 Z80을 하게 되었습니다. 다행이 MSX Technical Handbook이라는 명저 덕분에 쉽게 개발 할 수 있었습니다.

원래 소스코드는 10년 전 다니던 회사에서 퇴사하는 사이에 분실... 누가 제 책상을 정리해 준답시고 짐을 상자에 넣어주었는데 나중에 알고 보니 그게 빠졌던 거죠. 남은 것이라고는 구워진 EPROM 뿐이어서 친구 회사에 가서 읽으려고 생각만 하고 있다가 혹시 하고 구글님에게 의뢰했더니 찾아주시더군요. MSXZONE 운영자님에게 감사드립니다. (FA 테트리스 MSXZONE 페이지)

비록 소스는 없어졌지만, 그리고 발매 후 좀 더 재미있게 수정한 녀석은 아니지만 MSX 에뮬레이터로 게임은 할 수 있게 되었습니다.

혹시 관심 있으시면 내려받아서 해보세요. MSX 에뮬레이터들은 무료로 구할 수 있는 것들이 많습니다. 원래 Java Msx Emulator로 웹상에서 게임 할 수 있도록 하려고 했는데 이 에뮬레이터가 잘 작동하지 않네요.


이 게임을 출시한 회사가 FA 전자라서 게임 이름이 FA 테트리스가 돼버렸습니다. 요즘은 자막기를 주로 만들고 있습니다.


추가 : MSX Technical Handbook이 웹에 올라와 있더군요. 기록 차원에서 첨부를 합니다. MSXTechHandbook.zip

by 박성철 | 2008/02/28 09:24 | 프로그래밍 이야기 | 트랙백 | 덧글(10)

리눅스에서 캐논 CRW Raw 파일안의 JPEG 이미지 추출하기

제가 쓰는 캐논 10D와 G6의 Raw 파일 확장자는 CRW입니다. 요즘 포멧인 CR2에서는 Raw+JPG 모드로 찰영할 때에 JPEG 이미지가 별도 파일로 저장되지만 CRW은 JPEG 이미지를 Raw 파일 안에 담아두고 있습니다. 그래서 따로 추출하는 작업을 해줘야 합니다.

ExifTool 사용

ExifTool은 펄로 만들어진 커맨드라인 명령어입니다. Exif 정보를 읽고, 쓰는 기능을 가지고 있습니다.  제가 사용하는 ubuntu에서는 libimage-exiftool-perl 패키지 안에 들어있더군요.

sudo apt-get install libimage-exiftool-perl

이 명령어로 어떤 CRW 파일에서 JPEG 이미지를 추출하는 방법은 이렇습니다.
exiftool -b -JpgFromRaw CRW_0001.CRW > CRW_0001.jpg
man 페이지에 있는 다음 방식으로 실행하면 디렉토리안의 모든 CRW 파일을 읽어서 JPEG 이미지를 추출한 후에 이름 뒤에_JFR.JPG라고 덧붙여 저장합니다.

exiftool -b -JpgFromRaw -w _JFR.JPG -ext CRW -r .

output이라는 서브 디렉토리를 만들고 jpg 파일을 저장하고 싶다면 이렇게 하십시오.

exiftool -b -JpgFromRaw -w output/%f_JFR.JPG’ -ext CRW -r .


DCRAW 사용

dcraw는  raw 파일을 조작해주는 프로그램입니다. 제가 사용하는 ufraw가 이 dcraw의 frontend 성격의 프로그램이지요. dcraw는 ubuntu에서 dcraw 패키지에 들어 있습니다.

apt-get install dcraw

CRW 파일에서 JPEG 이미지를 추출하려면 dcraw의 썸네일 추출 기능을 사용하면 됩니다. 썸네일 추출 옵션은 -e 입니다.

dcraw -e CRW_0001.CRW

작업이 끝나면 CRW_0001.thumb.jpg라는 파일이 만들어져 있을 것입니다.

파일 이름을 바꾸고 싶다면 리디렉션을 사용합니다.

dcraw -c -e CRW_001.CRW > CRW_001.JPG

디렉토리 안의 모든 RAW 파일을 한꺼번에 처리하려면 와이드 카드를 사용합니다.

dcraw -e *.CRW




by 박성철 | 2008/02/12 12:07 | 사진 이야기 | 트랙백 | 덧글(0)

자바용 Active Record 기획안

설  연휴 전날 몇몇 회사 동료와 야근을 하려고 식사를 하던 중 그냥 일찍(?) 나가서 얘기나 하다 집에 가기로 의기투합하여 회사를 나왔다. 2차까지 가며 (1차는 별다방, 2차는 덩킨도넛... 꼭 알콜이 있어야 한다는 편견은 버리삼) 이런 저런 얘기를 하던 중 평소 궁금했던 것을 물어봤다.

"자바용 Active Record를 만들면 좋을지 모르겠는데 어떻게 생각해?"

한동안 이 문제로 고민을 해왔다. 이미 iBatis와 Hibernate같은 유명 인사가 있고 이 외에도 수많은 ORM 도구와 추상화 솔루션이 있는 상황에서, 그리고 우리의 완소 JDBCTemplate가 든든하게 뒷받침을 하고 있는데 Active Record를 따로 만드는 것이 의미 있는지 판단이 잘 서지 않았다. 아무리 Dynamic Proxy를 쓴다고 해도 최소한 인터페이스는 일일이 만들어 만들어줘야 하는 자바에서  생산성을 어느 정도 높일 수 있을지도 의문이었고 어떻게 보면 ORM을 사용하면서 도메인을 DB Table과 1:1로 대응하게 하면 그것에 곧 Active Record와 다를 바 없는 것 아닌가 생각되었기 때문이다.

그런데 동료들은 꼭 필요하다며 이런저런 이유를 늘어놓더니 결국 내 마음에 불을 질러 놓았다. 집에 오며 한 시간 넘게 생각을 해보니 대략 윤곽이 떠올라서 간단히 기획안을 적어본다.

배경

왜 Active Record가 필요할까? 솔직히 말하면 내가 필요하기 때문이다. 난 아직도 ORM을 쓰지 않는다. 더 정확히 말하면 도메인 모델링을 하지 않는다. 도메인 객체가 있기는 하지만 DB 구조를 반영해서 만들어진다. 여전히 모델링 단계에서 DB 설계를 먼저 하고 있고 DBMS의 고유 기능을 사용하는데 익숙하며 두꺼운 추상화 레이어를 두는 것에 막연한 두려움을 느끼고 있다.

무엇보다 프로젝트를 하다 보면 필연적으로 프리렌서와 함께 일을 하게 되는데 배우는데 비용이 많이 드는 기술 때문에 프로젝트에 엄청난 피해를 봤던 경험이 너무 많다. 반면에 롤을 세분화 하기에는 프로젝트 규모가 작다. 대부분 개발자 2-5명이 2-3개월 안에 완료해야 한다. 신입사원 교육 비용도 만만하지 않다.

모 은행 개발 프로젝트에 잠시 투입되었었는데 그 은행에서는 DB 추상화 레이어로 ORM과 SQL Mapper를 준비해 두었다고 한다. 권고하는 것은 ORM이지만 ORM으로 개발하도록 요구했더니 개발자들이 진행을 하지 못해서 결국 SQL Mapper를 추가로 제공할 수 밖에 없었고 대부분 어플리케이션이 SQL Mapper를 사용해서 개발이 되었다고 한다. (나는 iBatis와 jdbcTemplate는 개발 비용이 비슷하고 디버깅은 jdbcTemplate이 쉽다고 생각한다. 적절한 Query Object를 사용하면 동적 SQL 문제도 해결된다.)

마틴 파울러는 개발자들이 SQL을 어려워하고 DB보다 객체 다루기를 더 쉽게 생각하고 있다면서 Domain model과 ORM을 추천하지만 우리나라 개발자들은 DB와 SQL에 친숙한 것 같다. 아직 OOD로 넘어오지 못한 것 같다는 생각이다. 결국 DB를 원본으로 하고 DB와 1:1 구조를 가지고 있으면서 비즈니스 로직을 객체에 분산시키는 Active Record가 필요하다고 판단이 된다.

이런 이유로 프로젝트 이름을 'Last exit for the DB believers'라고 하면 어떨까 생각도 해보았다. (물론 농담이다. ㅡ.ㅡ);

목표 사양
  • Spring jdbcTemplate와 함께 사용한다. (ActiveRowMapper 지원)
  • CoC에 따라 table과 class를 맵핑하되 애노테이션으로 설정할 수 있다.
  • Relationship 지원 belong to, has many (many-to-many 포함) 지원
  • DB schema 자동인식
  • lazy load 지원
  • paging 지원
  • clob/blob 지원
  • criteria 지원
  • 필드 변경 여부 자동인식
아직 생각하지 않는 것
  • join
  • aggregation
  • data cache
  • cascade

by 박성철 | 2008/02/07 13:33 | 프로그래밍 이야기 | 트랙백(1) | 덧글(11)

◀ 이전 페이지다음 페이지 ▶