- 2006년 여름 개인용 만화 리더 Fiew를 만든 경험이 출발점이 되어, C++와 Windows API로 Photoshop과 비슷한 이미지 편집기 Fedit을 학위 논문 프로젝트로 구현함
- Fedit은 설치 프로그램, 압축 파일, 레지스트리 키, 추가 런타임 없이 단일 실행 파일로 동작해 제한된 권한의 PC나 USB 드라이브에서도 바로 실행할 수 있었음
- 인터페이스는 클래식 Photoshop의 작업 흐름을 닮도록 설계됐고, 떠 있는 도구 창, 색상 선택기, 레이어 관리, 되돌리기 히스토리, 이미지 필터, 사용자 정의 픽셀 이동 필터를 포함함
- 가장 큰 난관은 사용자 인터페이스 재현이었으며, 도구 설정 패널의 스냅/언스냅 동작과 색상·도구 선택기 구현에 많은 시간이 들어감
- 프로젝트는 논문 성공과 공학 학사 취득으로 이어졌고, 이후 GoldenLine CTO에게 인상을 남겨 대량 이미지 업로드용 WinAPI 앱을 만드는 C++ 일자리로 연결됨
만화 리더 Fiew에서 이미지 편집기 Fedit으로
- 2006년 초여름, 기존 이미지 리더 앱들이 마음에 들지 않았던 것이 출발점이었음
- 특히 마우스만으로 독서를 제어할 수 없어 키보드에 계속 손을 뻗어야 하는 점이 방해가 됨
- 대학에서 C++/Windows API 과정을 마친 직후였고, 여름방학 동안 개인적으로 이상적인 만화 리더를 개발함
- 이 만화 리더는 Fiew라는 이름을 가짐
- 2006년 초가을 학위 논문 주제를 정해야 했고, 이미지 뷰어 개발이 순조로웠던 경험 때문에 이미지 편집기도 만들 수 있다고 판단함
- 당시 Adobe Photoshop을 많이 사용하고 있었기 때문에 목표는 Photoshop과 유사한 편집기가 됨
Fedit의 구현 방식과 배포 제약
- Fedit은 C++로 작성된 Advanced Image Editor이며, Windows API와 GDI+ 그래픽 라이브러리를 사용함
- 사용자에게 유리한 배포 형태를 위해 다섯 가지 규칙을 따름
- 설치 프로그램 없음
- 압축 파일 없음
- 레지스트리 키 없음
- 추가 런타임 없음
- 단일 실행 파일
- 결과적으로 설치 없이 바로 동작하고, 제한된 권한의 시스템이나 USB 드라이브에서도 실행 가능하며, 적은 리소스를 사용하는 프로그램이 됨
Photoshop에 가까운 인터페이스와 기능
- 인터페이스는 클래식 Photoshop처럼 보이도록 신중하게 만들었고, 자주 쓰던 기능을 포함함
- 주요 기능은 다음과 같음
- 자유롭게 떠 있는 도구 창
- 색상 선택기
- 쉬운 레이어 관리
- 단계별로 되돌릴 수 있는 히스토리
- 여러 이미지 필터
- 직접 픽셀 이동 필터를 인코딩할 수 있는 행렬 인터페이스
- 이전 프로젝트 Fiew에서 가져온 대규모 이미지 라이브러리 뷰어도 포함함
- 많은 양의 사진을 빠르고 쉽게 스크롤할 수 있었음
직접 디버깅해야 했던 개발 과정
- MSDN과 Experts Exchange를 많이 참고했지만, 문제들이 너무 구체적이어서 대부분 직접 분석하고 디버깅해야 했음
- 학사 논문 마감일을 맞춰야 했기 때문에 마지막 두 달 동안 하루 14시간씩 작업함
- 가장 까다로운 영역은 사용자 인터페이스였음
- Photoshop과 최대한 비슷한 작업 흐름을 원했음
- 도구 설정 패널을 자유롭게 스냅하고 언스냅하는 동작이 특히 어려웠음
- 색상 선택기와 도구 선택기를 재현하는 일도 쉽지 않았음
- 프로젝트를 마칠 즈음에는 상당히 지쳤고, WinAPI에 대한 반감도 생김
논문 이후의 결과와 공개 자료
- 논문은 성공했고, Warsaw University of Technology에서 Bachelor of Science in Engineering 학위를 받음
- Fedit은 온라인에서 몇몇 긍정적인 리뷰를 받았지만 적극적으로 홍보하지는 않았음
- 이후 Fiew와 Fedit이 GoldenLine CTO에게 인상을 남겼고, Flickr 클론을 위한 대량 이미지 업로드용 고효율 WinAPI 앱을 만드는 C++ 업무로 이어짐
- 공개 자료
- Fedit 및 Fiew 소스 코드: GitHub에서 확인 가능함
- 논문 문서 PDF: Fedit 논문 문서
- 원래 앱 웹사이트의 Web Archive: 당시 웹사이트 아카이브
- Hacker News 토론: 관련 토론 페이지