다국어 지원의 난관 - 글꼴
다국어 지원을 하려면, 전에 몇 번 포스팅했던 것 처럼 몇 가지 요소가 갖춰져야 한다. 즉 표현할 문자 집합과 그에 대한 인코딩이 필요하다. 그렇지만 한 가지 요소가 더 필요하다. 바로 화면이나 인쇄물에서 표현되기 위한 "글꼴;font"가 그것이다.
요즘처럼 Unicode 기반의 시스템이 많이 보급된 상황에서는 많은 언어의 문자들이 쉽사리 지원이 된다. 특히나 웹 상으로 전달되는 문서들의 경우 UTF-8 등 굉장히 범용적인 문자집합/인코딩을 써서 웹 브라우져 등을 통해 쉽게 읽을 수 있고 이를 가지고 무언가 하기도 편하다.
문제는 이렇게 다국어 지원이 잘 된 일부 응용들을 벗어났을 때의 일이다. 특히나 글자하나하나가 굉장히 많은 픽셀이 필요한 (혹은 벡터가 복잡한) CJK† 문자들의 경우 문자 집합이나 인코딩 관점에서는 지원되지만 실제로는 폰트가 없어서 동작하지 않는 상황이 종종 발생한다. 즉 특정 응용에 UTF-8 등으로 전달은 할 수 있지만, 그 쪽에서 (처리에 필요한) 해석까지 다 해놓고도, 최종적으로 출력하는 부분에서 제대로된 폰트가 없어서 이상 동작하거나 제대로 출력되지 않은 화면/인쇄물을 내놓는 것이다 -_-;
실제로 지금 내가 겪고 있는 문제는 Google Chart API를 통해서 한 해 동안 사용한 태그 정보를 요약하려는 상황에서 발생했다(파이 차트가 좀 이뻐보이긴 했다…). 그러나 한글을 레이블로 사용하려한 순간… !@#$% 하게도 ??? 라고 출력되는 문자들의 압박이란…
Google Chart API
12월 6일에 공개된 API이니 이미 좀 된 얘기지만, 이글루스의 연말 블로그 통계 결산을 보면서
"저런식의 통계를 쉽게 못낼까"
라고 생각하다가, 월 초에 봤던 Google Chart API가 떠올랐다. 그래서 좀 만지작만지작 대다가 이 앞 두 포스팅이 나오게 된 것.
쓰면서 느낀 점, 특히 강점은 우선 별다른 클라이언트 코드가 필요치 않다는 것. 가끔 쓰는 정도면 별도의 툴이나 스크립트 없이 손으로 쓱쓱 작성하고 웹에 링크하 - 고 잊어버리 - 면 된다. 그리고 웹로깅 툴의 통계툴이나 간단한 그래프를 그릴 때에는 복잡한 과정없이 그래프를 그릴 수 있다는 점이 좋다. PHP GD 툴 같은 걸 쓸 때의 삽질이랑 비교하면 거의 -_-;; GD 라이브러리 같은 것으로 그래프를 그리는 거랑 난이도를 비교하면 정말 하늘과 땅 차이 -_-; 선을 어떻게 그리고, 틱간 간격 잡고, 이런거 다 신경쓸 필요가 없다는 것은 무척 좋다. 자동화 되는 부분이,
- 그래프 출력 그 자체
- 틱;tick(눈금) 레이블 그리기, 축;axis 레이블 그리기 등의 작업, 다중 레이블링
- 그래프로 나뉜 영역의 색칠, 파이형 그래프에서 각 구간 그려주기
- 영역의 색, 그래프의 선 색 등의 조절
- 벤다이어그램을 그릴 수 있다!
그렇지만 단점이 없는 것은 아니다. 우선 각 축의 축척;scale을 사용자가 조절할 수가 없다. 일상적인 그래프에서는 흔하지 않지만, 약간만 공학적인 그래프로 들어가면 단순히 선형 증가하는 축이 아니라 로그 스케일로 증가한다거나 제곱;square/세제곱;cube 스케일의 축이 필요한 경우가 생긴다. 이런 경우에 대한 대응은 괴롭다. 각 축에 붙는 틱 표시를
시작 - (중간 1) - (중간 2) - … - 끝
같은 형태로 하게되는데, 이 때 중간 틱의 레이블은 시작/끝의 등간격으로 찍히게 된다. 그래서 로그 스케일 등 선형 스케일이 아닌 경우에는 제대로 표시하려면 일일이 지정해줘야 한다. (혹은 틱 레이블 자체를 해당 단위계의 단위 좌표로 하던가…)
2007년 rein’s world 결산
2007년 한 해가 지나갑니다. (대충 21시간쯤 남은 상태)
2007년들어서 블로깅을 조금 본격적으로 하게 되었는데, 이걸 통계로 내보면 (이전 포스팅에서 언급한 플러그인을 써서 이 포스트를 쓰고 있다)
- 포스트 : 184개
블로깅을 좀 더 본격적으로 해보자고 생각한 6월부터 시작해서 꾸준히 증가하다가, 4주 훈련을 갔던 10월은 왕창 줄었고, 일이 많았던 12월도 포스팅이 적군요 -_-a - 댓글 : 693개
당연하다면 당연하지만, 포스팅 수와 동일한 경향의(…)
계속 읽기: “2007년 rein’s world 결산” »
WordPress Annual Statistics
국내에서는 상대적으로 소수인 WordPress 블로깅 툴을 사용하고 있다. 상대적으로 작은(진짜?) 코어 부분과 풍부한 플러그인 / 테마 등의 요인으로 선택했다. 특히나 플러그인 지원이라는 측면에서 프로그래머 혼을 불태우게 하는 면이(…)
연말을 맞이하여 블로고스피어에는 연간 통계를 올리는 곳이 많은데 - 특히나 이글루! - 그 기능이 매우 부럽더라(…). 지난 금요일 오후부터 맞이한 연말의 연휴를 소비할 곳도 없고(흑흑), Google Chart API를 써보고 싶기도 해서 이런 플러그인을 만들어내게 되었다. (다만 이 글을 보고 이걸 쓸 수 있을 사람 수는…)
아직 포스팅 자체에 대한 필터를 거는 방법을 생각하는 중이라 그 기능은 아직 없다†. 현재는 관리자 기능의 Settings (2.3버젼에서는 Options) → Annual Statistics 다음과 같은 내용을 출력한다.
계속 읽기: “WordPress Annual Statistics” »
리뷰: 죽은 경제학자의 살아있는 아이디어
작년 정도부터 시작해서 올해까지 몇 권의 대중적인 교양 경제학 책들을 읽었다. 대충 나열해보자면, 런치타임 경제학, 경제학 콘써트, 불량경제학, 위키노믹스, 행동 경제학, 승자의 저주, 이코노믹 씽킹, 그리고 얼마전에 읽은 나쁜 사마리아인들 까지인듯하다.
읽으면서 느낀 것은, 컴퓨터 공학 / SW 개발쪽 교양(?)서적을 읽을 때랑은 달리 용어에도 버벅이고, 심지어는 비유(…)에도 괴로워할 때가 나온다는 것. 그래서 개론적인 느낌에서 경제학 전반을 훑어줄만한 책을 찾다가 이 책을 구입해서 읽게 되었다.
저자가 써놓은 것처럼 영국/미국의 경제학자들을 중심으로 특정 경제학 사조를 시작한 경제학자의 삶과 이론에 대해서 간략히 설명하고, 다음 세대의 이론에서 어떤 부분이 반박되고, 이런 부분은 그 다음 세대로 넘어간다 하는 식으로 내용을 설명한다.
"국부론"의 애덤 스미스, 로마클럽 얘기와 함께 들었던 이름인 맬서스, 런치 타임 경제학을 통해 이름을 익혔던 리카도 … 마르크스를 거쳐 경제학에 문외한인 나도 알정도의 인물인 케인스까지. (그리고 그 이후의 통화주의자와 공공선택학파 등등…) 각 내용을 많지도 적지도 않게(사실 약간 적다면 적긴하다; 읽다보면 좀 아쉬우니) 설명하고 있다. 공대생이라 그런건진 모르겠지만 좀 더 수식을 써도 볼만하지 않았을까 하는 생각 -_-;; 그렇지만 일화를 인용하는 방식이나 "전체적인 흐름"을 설파하는 방식은 무척 좋았던 것 같다. 번역도 거슬림없이 잘 읽히는 편이었고;
ps. 교양서…특히나 해당 분야 전공자를 대상으로 쓰지 않는 책의 경우 언제나 느끼게 되는 문제지만 뭔가 2% 부족하다. 코드나 구조설명없는 IT 교양서가 뜬구름 잡는 얘기가 되기 쉬운 것처럼, 밑바닥이 되는 통계나 수학적인 설명이 빠진 것은 좀 안타깝다. 그렇지만 이 책을 기점으로 이것저것 찾아보기는 좀 더 쉬워질 것 같다.
내일 정도에는 이 책에서 인상깊었던 부분을 한 두 집어서 포스팅해 볼까 한다 -_-a 특히나 현재의 한국의 정치 상황과 연관지어서 꺼내면 재밌을 부분들이 좀 있다;
C++ template 함수의 타입 추론
몇 일 전에 연이어서 C++로 일종의 지연된 함수호출 객체를 만드는 코드에 관해 포스팅했었다. (#1, #2, #3 참조)
마지막 포스팅에서도 해결 못했던 문제가 아래 코드에 나와있는 템플릿 함수를 사용할 때,
template< typename T, typename R , typename A0 , typename A1 > Closure* MakeClosure( T& obj, R (T::*func)( A0 a0 , A1 a1 ) , A0 a0 , A1 a1 ) { return new Closure2 < T, R , A0 , A1> ( obj, func , a0 , a1 ); }
void Foo::Bar( int&, int, int ) 같은 함수를 func 자리에 전달할 경우에 생기는 문제였다. C++에서 템플릿 함수의 인자 T를 다음과 같은 타입으로 추정한다. (From IBM linux Compiler page; 해석법†)
T, const T, volatile T, T&, T*, T[10], A<T>, C(*)(T), T(*)(), T(*)(U), T C::*, C T::*,
T U::*, T (C::*)(), C (T::*)(), D (C::*)(T), C (T::*)(U), T (C::*)(U), T (U::*)(), T (U::*)(V),
E[10][i], B<i>, TT<T>, TT<i>, TT<C>
위에서 사용한 Foo::Bar() 함수는 MakeClosure 템플릿 함수에서 T, T& 로 해석될 여지를 가지고 있기 때문에‡ "모호한 타입: int/int& 일 수 있음" 이란 이유로 컴파일이 안되었다. 해결책을 놓고 좀 고민했는데, 이미 해답을 알고있던 분이 있더라.
발견한 해답은 아주 단순한 형태.
계속 읽기: “C++ template 함수의 타입 추론” »
이사 갑니다
블로그 얘기가 아니라 rein 본인의 얘기. 곧 (1월 초순) 현재 살던 원룸을 떠나 다른 집으로 이사를 감행할 예정. 학교나 학교 근처에서만 살다가 근방을 떠나게 되니 뭔가 졸업을 했다는 실감이 나게되는 상황(이미 1년이나 지나가는 일이지만…)
4년간 지낸 학교 기숙사를 떠나, 그러고나서 3년간 살았던 학교 근처의 원룸을 떠나, 이번엔 지하철 2호선 신천역 근방으로 이사를… 3년 밖에 안되었는데도 원룸 전세/보증금이 꽤 올랐더군요 -_-a 일단 옮길 장소는 아래 지도의 타원안 어딘가. 정확한 위치는[...]
Image from http://congnamul.com All rights reserved.
낙성대에서 출근하던 것 보다는 강남역도 안지나고 교대역도 안지나니 출근은 편해지겠고(…), 아마도 자전거 출퇴근도 가능할듯하니 좀 더 출근의 질이 상승할 거라고 믿는 중.
프로그래머스러운오타
웹 서핑을 하다가 간혹 프로그래머스러운 오타를 발견하게 되는데, 오늘은 WordPress의 프로젝트 타임라인을 보다가 발견한 것이,
이런 애인데.
Ticket #5536, #5537을 가만히 들여다보면 우리(…) 프로그래머들이 흔히 저지르는 오타가 보인다. in을 in이라 치지못하고 int 라고 입력한 것. 더더욱 안타까운(?) 것은 Trac 티켓은 수정도 안된다는 건데.
그래서 이런 일을 한 듯하다.
- 오타를 수정한 티켓 재발행
- 이전 티켓을 close (duplicate로)
ps. 어제 IRC 채널에서 s*a*a 도
cons가 const로 오타나요
라고…


6 comments