Windows용 코딩용 글꼴의 변천사

사용자 삽입 이미지

1. Courier, Courier New

고정폭 타자기 스타일 서체의 원조이다. 16비트 시절부터 정말 유구한 역사를 자랑하며, 지금은 그만큼 너무 낡은 구닥다리가 되기도 했다. 그 시절에 나온 프로그램 개발툴의 에디터들은 기본 폰트가 전부 Courier 계열이었다.

Courier는 비트맵 글꼴이고, New 버전은 트루타입 글꼴로 Windows 3.1부터 도입됐다. 동일한 크기에서 두 폰트는 모양이 서로 미묘하게 다르다. 작은 크기에서도 New 버전은 또 전용 비트맵이 있기라도 한 것처럼 모양이 아주 균형잡힌 편인데, 그건 비트맵이 아니라 힌팅의 결과이다.

2. Fixedsys

Courier는 알파벳/숫자가 정사각형에 가까운 납작한 모양이다. 그렇기 때문에 이 글꼴의 metric 기준으로 한글이나 한자를 찍으면 그런 글자는 가로로 너무 납작해진다.
그 반면 Fixedsys는 한글· 한자 같은 전각문자가 정사각형이고 영문은 반각 비율로 찍힌다. 다시 말해 얘는 전각문자와 같이 잘 어울리는 코딩용 비트맵 글꼴이다.

Visual C++ 4~6의 경우, 영문 Windows에서 설치하면 텍스트 에디터의 기본 글꼴이 Courier로 잡혔으며(New가 아님), 그리고 대화상자의 글꼴이 MS Sans Serif로 지정됐다.
그러나 한중일 Windows에서 설치하면 텍스트 에디터의 기본 글꼴이 Fixedsys가 됐고, 대화상자의 글꼴은 큼직한 System으로 지정됐다.

이것은 Windows 3.x 시절에 영문판은 프로그램 그룹의 텍스트가 System보다 더 작은 MS Sans Serif였지만 한중일에서는 동일하게 큼직한 System으로 지정됐던 관행을 그대로 따른 것으로 보인다.

재래식 Windows GDI 말고 WPF나 DirectWrite 같은 최신 UI/그래픽 엔진을 사용하는 프로그램에서는 트루타입 글꼴 말고 Courier이나 Fixedsys 같은 비트맵 전용 글꼴은 이제 사용하지도 못한다. (가령, Visual Studio 2010 이상)

3. 돋움체

2000년대 이후에 나온 Visual Studio들은 한국어판을 설치하면 텍스트 에디터의 기본 글꼴이 이걸로 설정된다. 이 전통이 지금까지 쭉 이어지고 있다.
뭐, 얘는 무난하긴 하지만 너무 개성이 없고 밋밋하다는 게 흠인 듯..

4. Lucida Console

한 Windows 2000쯤부터 추가된 것 같다. 납작한 Courier New의 대체제로 훌륭한 역할을 하고 있다.

5. Lucida Sans Typewriter

Lucida Console보다 세로로 더 길쭉해서 한글· 한자와 잘 어울린다. 전반적인 모양도 미려하면서 너무 튀지도 않고, 비트맵이건 ClearType이건 어느 힌팅에도 잘 맞고.. 개인적으로 이 폰트를 굉장히 좋아한다. 거의 15년이 넘게 Visual Studio의 텍스트 글꼴로 사용하고 있다.
단, 얘는 Windows에 기본 내장돼 있지 않다. MS Office를 설치해야 한다.

6. Consolas

Windows Vista에서 처음 도입된 깔끔한 글꼴이다. 얘는 힌팅이 오로지 ClearType에만 맞춰져 있기 때문에 저게 없는 환경에서는 글자가 작은 크기에서 흐릿하게 뭉개지고 별로 보기 좋지 않다.
Lucida Sans Typewriter보다 납작하지만 그래도 Lucida Console보다는 길쭉하다.

7. Cascadia Mono/Code

언제부턴가 Windows 10에 요런 폰트가 추가돼 있더라. MS Office 번들은 아닌 듯..
모양을 튀게 만들려고 노력한 티는 나지만 개인적으로는 Lucida나 Consolas의 아성을 넘을 퀄리티는 아닌 것 같다. 9포인트는 너무 작고, 10포인트는 너무 큰 것도 아쉬운 점임.
다만, 꽤 다양한 굵기 바리에이션이 제공된다는 점은 인상적이다.

여담

  • 요즘 코딩용 글꼴은 Courier 시절 같은 타자기 스타일을 탈피하여 불변폭이면서도 필기체 같은 느낌을 넣고, 한편으로 1 l I 같은 글자는 더 확실하게 구분 가능하도록 OCR용 폰트 같은 변화도 주는 것 같다.
  • '궁서체'도 한글은 좀 뜬금없지만 영문· 숫자는 의외로 타자기 자형과 비슷해서 코딩용 폰트로 쓸 만하다..;;
  • 그리고 맥OS에 있는 Monaco도 나쁘지 않아 보이는데.. Windows 동네에서는 쉽게 구경할 수 없는 듯..

Posted by 사무엘

2020/12/19 08:33 2020/12/19 08:33
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1832

1. 날개셋 한글 입력기 9.9

이미 확인한 분도 계시겠지만 날개셋 한글 입력기의 차기 버전인 9.9가 지난주, 지난 1월 말에 완성되고 공개되었다.

버전 9.9와 10.0 중에서 고민하던 끝에 아쉽지만 9.9를 선택했다. 비록 9.8x 이후로 많은 작업이 진행되고 많은 것이 개선되긴 했지만 외형은 지난달에 올렸던 개발 근황 이후로 크게 달라진 게 없기 때문이다. 그래서 새 버전 소식도 이렇게 소박하게(?) 전하고자 한다.
9.9라는 숫자에는 본인의 그런 아쉬운 심정이 담겨 있다. 그래도 얘는 9.x대의 마지막 버전이며, 진짜 10.0이 한 3월 말쯤으로 계획돼 있다.

(1) 9.82에서 프로그램별 수동 보정 기능이 추가됐는데, 몇몇 사용자 분들에게서 온 피드백을 들어 보면 그게 실제로 도움이 된 듯하다. 그거 설정을 바꾸는 것으로 새로운 프로그램에서의 오동작을 해결했기 때문이다. (예: Visual Studio Code 에디터)

(2) 한편, 크롬 브라우저가 버전 78에서는 자신이 데스크톱 앱인데도 IME에다가는 메트로 앱이라고 알려주는 버그가 있어서 9.82 당시에는 이를 임의로 보정하는 설정이 들어갔었다. 하지만 지금의 79에서는 그게 고쳐졌기 때문에 날개셋에서도 보정 설정이 제거되었다. 하지만 보정을 하더라도 딱히 다른 문제나 부작용은 없다.

그러므로 현재로서는 본인이 아는 한도에서는 “강제로 데스크톱 앱으로 동작” 보정이 필요한 프로그램이 없다는 것을 도움말에도 언급해 놓았다. 그냥 미래에 또 이런 일이 발생할 수 있다는 걸 염두에 두고 보정 설정을 남겨 뒀다.

공식적으로 문서화되지 않은 변화 사항으로는 남은 메모리 양을 표시할 때 내가 직접 단위 계산을 하는 게 아니라 운영체제의 깔끔한 API를 쓰게 한 것, 변환기 대화상자가 프로그램을 실행시킨 쪽의 모니터에서 표시되게 한 것, 인코딩 목록에서 UTF-7은 이제 거의 쓰이지 않으니 맨 뒤로 밀어낸 것 등.. 아주 사소한 것 위주이다.

그런 것 말고 좀 유의미한 작업이 진행된 것도 있는데, “조합과 후보 자동 완성”과 “조합 안에 조합 생성” 입력 도구에서 각종 후보 목록은 백그라운드 스레드에서 생성될 수 있게 내부 공사를 진행해 놓았다. 전자는 타이핑에 랙을 야기하지 않으면서 목록이 다 완성되면 한꺼번에 짠 표시하는 것만 담당하지만, 후자는 마치 웹 페이지 로딩하듯이 일단 자그마한 목록부터 띄운 뒤에 후보를 여기저기 incremental하게 실시간으로 추가하는 것까지 가능하다. 다만, 이것도 이를 실제로 활용하는 기능이 아직 없기 때문에 존재감이 없다.

입력기에 적용된 사소한 개선 사항이 타자연습에도 같이 반영된 것이 있긴 하지만.. 너무 사소하고 자잘한 것이기 때문에 타자연습은 아직 정식으로 버전업을 하지 않았다. 이번 9.9는 타자연습 3.9와도 API가 호환되니 그대로 같이 사용 가능하다.

새 버전을 유용히 사용하시기 바란다. 페이스북 플러그인은 고장난 지 한참 됐기 때문에 프로그램 다운로드 페이지에서도 완전히 제거했다. 그래서 본인의 이메일 주소만 기재해 놓았다.

2. 레거시 프로젝트 파일 정리

새해 기념으로.. 날개셋 한글 입력기의 소스에서 구닥다리 구버전 Visual C++용 솔루션/프로젝트 파일들을 드디어 완전히 삭제했다. 이를테면 *.vcproj (200x용), 그리고 심지어 *.dsp/*.dsw (6!!) 말이다.

사실, 소스 코드에 C++11 문법을 도입하던 순간부터 내 프로젝트들은 VC++ 2010 이전 버전과 연을 완전히 끊은 거나 마찬가지였다.
그리고 VC++ 역시 딱 2010부터 지금과 같은 솔루션/프로젝트 파일과 버전 관리 체계가 정착했고, IDE와 컴파일러 툴킷, 플랫폼 SDK 계층이 깔끔하게 분리되기도 했다. 그러니 그 이전 버전은 이제 신경 쓸 필요가 없다.

본인의 개인적인 소신은 더 쓰이지 않는 파일이어도 요즘이 하드 공간이 부족한 시대도 아니고, "굳이 일부러 찾아서 지우는 수고까지 할 필요는 없다" 주의였다. 하지만, 그것들이 보는 사람을 괜히 헷갈리게 하고 무질서도를 높이는 부작용에 대해서는 지금까지 생각을 못 하고 있었다.

이건 물건 정리와도 비슷하다. 언젠가는 다시 쓸 일이 생길지도 모르는 물건이 분명 있겠지만.. 너님의 생활 습관상 그럴 일 없으니 좀 버려야 하는 물건도 있다.
비슷한 맥락에서.. 사용되지 않는 코드도 무작정 주석이나 #if 0 처리만 해서 누더기처럼 덕지덕지 남겨 두는 게 장땡이 아니다. 재사용할 가능성이 정말 희박하고 남 보기에 정신 사납게 하는 역효과가 더 큰 것들은 그냥 완전히 지워 없애 버리는 미덕을 발휘하는 것도 필요해 보인다. 그 '정도'와 경계는 개인 취향에 달린 문제이겠지만 말이다..

아울러, 소스 코드들이 DB 데이터라면, 이들을 빌드하는 방식을 명시하는(각종 컴파일러· 링커 옵션들) 프로젝트 및 복잡한 빌드 스크립트는 DB 스키마 또는 아주 복잡한 쿼리와 비슷한 물건일 것이다. 이것도 날렸다가 다시 구성하는 건 소스 코드 자체를 날리는 것 만만찮게 골치아픈 일이 될 것이다.

3. 3D 그래픽 시연 프로그램

끝으로.. 최근에 이걸 만들어 봤다.
3D 컴퓨터그래픽을 공부하는 사람이라면 모를 수가 없는 그 유명한 '유타 주전자'를 3차원 그래픽 시연 프로그램의 예제 데이터로 추가했다. 이게 지난 10여 년 동안 제공되지 않고 있었다니.. 송구스럽기가 이루 말할 수 없을 지경이다.

이 주전자를 구성하는 3D 좌표 데이터야 이미 대외적으로 널리 공개돼 있다. 하지만 이걸 3차원 그래픽 시연 프로그램이 곧장 읽을 수 있는 무식한 직선의 나열로 변환하려면 베지어 곡선을 넘어 베지어 곡면이라는 것을 적당히 근사해서 와이어프레임 형태로 표현할 수 있어야 한다.

3차 베지어 곡선이 4개의 점(시작점 + 끝점 + 제어점 2개)으로 구성되고 t=0..1 사이의 인자를 받는 매개변수 함수로 표현된다면..
3차 베지어 곡면은 그런 베지어 곡선을 4개나 모아서 평면을 이루며, 0..1 사이의 인자 매개변수도 하나가 아니라 2차원답게 둘을 받는다.

전자가 함수값을 구하기 위해 계수와 제어점 사이의 곱셈과 덧셈을 4회 수행한다면, 후자는 그 제곱인 16회나 수행한다. 아니, 각각의 항 자체도 계수*제어점이 아니라 계수x*계수y*제어점으로 곱셈의 횟수가 더 많다. 계산량이 정말 장난이 아니더라.

이 세상의 많고 많은 글꼴들이 모두 베지어 곡선으로 표현되듯, 자동차나 비행기처럼 인간이 디자인한 기계류의 그 '유체역학적인' 부드러운 곡면도 다 이 공식을 이용해서 기술된다. 옛날에 베지어 곡선이라는 걸 고안한 사람인 '피에르 베지어'가 직업이 무엇이었는지를 생각해 보면 답이 명확해진다.

암호 같은 베지어 곡면을 인터넷을 통해 알게 된 공식대로 직선들로 쫙 풀어서 표현해 주니.. 내 프로그램에서 '유타 주전자'의 와이어프레임이 거짓말처럼 짠 나타났다. 정말 신기했다.
이런 유형의 계산은 양만 많지 패턴이 워낙 규칙적이니, 캐시 적중률 높고 병렬화에도 유리하다. GPU가 괜히 진작부터 만들어져 쓰인 게 아닐 것이다.

일반적인 3D 그래픽 렌더러라면 내 프로그램처럼 가냘픈 선이 아니라 폴리곤을 기본 단위로 취급할 것이고, 와이어프레임조차도 폴리곤을 기반으로 렌더링 방식만 변경해서 표시하는 것일 테니 삼각형 단위로 선들이 더 조밀하게 나타날 것이다. 하지만 내 프로그램은 그냥 베지어 평면의 각 격자 단위로만 선을 그었기 때문에 기본 단위가 사각형 형태로 나타난다.

정말 신기하게도.. 이 유타 주전자 데이터를 구성하는 선의 개수와,
기존 예제 중에서 원형 튜브(Torus)의 선의 개수가 서로 정확하게 일치한다. 2304개이다.
둘은 내부 구조나 데이터 생성 방식이 서로 완전히 다르고 관련이 없는데도 말이다.

Posted by 사무엘

2020/02/02 19:33 2020/02/02 19:33
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1712

코딩 신선놀음 중

오랜만에 근황 겸 내 사진이나 좀 투척하겠다. 이제 날짜상으로는 여름이 다 갔다지만 난 여전히 낮과 밤에 반팔 차림이다.
사용자 삽입 이미지
확실히 북한산 맑은 공기를 주입해 주면 코딩이 잘 되는 거 같다.. ㅋㅋ
사용자 삽입 이미지
어느 전원 주택 2층 다락방에서의 신선놀음. 참고로 우리집 아님.

날 가까이에서 볼 수 있는 학교· 교회 등의 지인 한정으로나 의미가 있겠지만..
도대체 저 인간은 왜 어딜 가나 맨날 노트북 PC를 들고 다니고 게다가 인터넷조차 없이도 혼자 뭘 끄적거리는지 궁금하신 분들은 내 연구실을 오프라인 방문하는 걸 언제든지 환영한다. 장소가 따로 있는 게 아니라, 그냥 컴퓨터 펼쳐 놓고 작업하고 있는 곳이 어디든지 연구실.
내가 지금 한글 입력에서 관심사가 무엇이고 뭐가 고민인지를 코드와 함께 친절하게 알려 드리겠다.

Posted by 사무엘

2014/10/01 08:39 2014/10/01 08:39
,
Response
No Trackback , 3 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1013


블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2021/10   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Site Stats

Total hits:
1670216
Today:
309
Yesterday:
598