Sablog Models 55

장고는 반쪽 MVC이다

요 며칠 간 프로젝트를 진행하면서 장고(Django)를 쓰기 시작했다. 사실 장고 자체를 접해 본 건 다소 오래 된 일이었던 것으로 기억한다. 아마 서버를 겸해 공부한답시고 설치한 리눅스가 너무 어려워서 날리면서 한동안은 리눅스와 거리를 두고 살았고, 파이썬도 잊었을 것이다. 그 이후 호스팅 업체를 알아보면서 윈도우 기반으로 PHP+MySQL이 돌아가는 APM을 쓴 적도 있다. 지금은? 만약 지금의 내가 과거의 내게 충고할 수 있다면, PHP를 가능한 대안으로 생각할 여지를 만들도록 놔 두지 않을 것이다. 요즘은 멀티부팅을 밥 먹듯 한다. 장고는 MVC 웹 프레임워크이다. 구체적으로는 DBMS에 대한 파이썬 클래스 ORM 래핑이 M이고, HTTP Request-Response를 수행하는 파이썬 객체 래핑..

어떤 웹 브라우저를 써야 합니까

어떤 웹 브라우저를 써야 합니까. 내가 상당히 많이 받았던 질문인데, 이는 다름아니라 내가 2007년 무렵부터 Internet Explorer 6를 쓰지 말아야 한다고 내 주변 사람들에게 몸소 광고를 하고 다녔기 때문이다. IE6를 쓰지 말라는 건 하나의 주장에 불과하기 때문에 나는 이 주장에 대한 쉽고 합리적인 근거를 찾느라 꽤나 애를 먹었다. 게다가 이미 내 이야기를 듣는 사람들은 IE6를 사용하고 있었고 그걸 인터넷이라는 이름으로 알고 있었다. 내 호소에 면면이 공감하더라도 그 사람들은 그 대체재에 대한 견해를 그 호소의 당사자인 나로부터 구할 수밖에 없었다. 나는 그것을 감수했다. 물론 항상 일이 잘 진행된 것은 아니다. 이 문제는 시간이 흐르고 흘러 IE의 다음 버전이 끊임없이 나오고 Windo..

페도라 19로 늦은 업그레이드

뭐 특별한 내용은 아니고 업그레이드 후기 및 잡설. rpmfusion 관련 문제도 꼬이고, 리눅스에서 개발할 일도 없어서 꽤나 오래 페도라 업그레이드를 안 하고 지냈다. 거의 반 년. 그러다 이제 슬슬 방학도 끝났고, 새 학기 접어들어 뭔가 시작하려다 보니 네이티브를 안 쓸 수가 없었다...-_-; 물론 새 학기라서 뭔가 삽을 뜰 수 있으리라고 생각한 건 오산이었다.무튼 우선 rpmfusion 문제를 해결했다. 그냥 --nogpgcheck을 돌렸는데, 지난번에 fedup으로 업그레이드하면서 남은 rpmnew 파일이 gpgcheck=1로 되어 있어서 yum이 이러지도 저러지도 못하는 상황이었다. /etc/yum.repos.d에서 rpmnew 파일을 직접 수정해야 했다.(지금 fedup은 gpgcheck=0..

왜 abstract static은 금지되어 있는가?

자바(Java)로 객체지향을 처음 접하는 사람이 꽤 흔하다. 이들이 가장 많이 하는 실수이면서 잘 풀리지 않는 의문 중 하나가 stackoverflow에 차고 넘치는 'abstract static'이다. abstract static으로 규격을 만들어 놓으면 인스턴스화할 필요는 없으면서 상속될 수는 있으므로, 프로그램 내에서 문맥의 영향을 받지 않는 메서드를 모아 쓰기 좋은 구조일 것이다. 이런 패턴은 상당히 많은 프로그램에 적용될 수 있을 것이다. 그런데 왜 그런 좋은 게 금지되는 걸까? 답은 먼 곳에 있지 않다. 자바는 객체지향 언어라는 것. 그리고 그 중에서도 클래스-인스턴스 관계를 매우 엄밀하게 따지는 언어라는 것이다. 일견 자바의 static은 C++의 static과도, Python의 classm..

strings.xml 로컬화 점검 방법 (How to check strings.xml localization)

안드로이드 SDK에서 l10n은 strings.xml을 이용해 이루어진다. 해외 법인이 따로 있는 회사에서 앱을 개발하는 경우에는 아예 소스 코드를 넘겨서 별도의 앱을 만들어 버리는 경우가 많지만, 규모가 그렇게 크지도 않고 문자열 외의 대대적인 로컬화가 필요가 없다면 res/values locale postfix modifier 사용은 필수적이다. 이럴 경우 트리 메인테이너에게는 언어별 strings.xml을 관리해야 한다는 부담이 작용한다. 개발이 항상 선형으로 이루어질 수는 없기에, 로컬화 담당자가 strings.xml을 들고 왔을 때 무엇이 누락되었을지 찾기 어렵기 때문이다. 주로 이런 문제는 담당 로케일의 QA가 운좋게 찾아내는 게 고작이다. 오픈소스의 경우 얼마나 많은 타깃 언어가 만들어질 것..

하드 디스크 고장에 대처하는 자세

1. 고장의 기미가 보이면 그 하드웨어를 고치려 들지 말고, 무슨 수를 써서라도 사용 시간을 줄이고 중요한 것부터 백업부터 해야 한다. 노력해서 하드 디스크를 고쳐서 원만하게 쓴다고 돈이 아껴지는 게 아니다. 어떤 자동화된 도구를 쓰든 자칫하면 엄청난 시간 낭비로 이어져 전혀 절약이 되지 않을 뿐더러, 대개의 경우 더 심각한 고장 상황을 초래하고 더 많은 데이터를 잃게 되는 원인이 된다. 논리적 오류가 물리적 오류로 발전하고, 물리적 오류가 번져 나가고... 이런 상황은 막아야 하니까 말이다. RAM이든 HDD이든 저장소는 예나 지금이나 원시적인 방식으로 돌아가는 것을 알 수 있다. 데이터 밀도가 높아지면 결함에 대한 내성은 낮아지기 마련이고, 안정적인 데이터 관리에는 돈이 필수적이다. 슬픈 사실이다. ..

삼항 연산자의 우선 순위와 싱글턴 패턴의 작성

LinkManager 클래스에 private LinkManager()와 private static LinkManager sInstance;가 있다고 가정하자. 예를 들면 public static LinkManager getInstance(...) 말미에서, return sInstance == null ? sInstance = new LinkManager() : sInstance; 이런 코드는 가능하지만, return sInstance != null ? sInstance : sInstance = new LinkManager(); 이건 불가능하다. 이건 C/C++에서 업어온 삼항연산자의 정의 때문이다. C11의 정의는 다음과 같다. (6.5.14) logical-OR-expression: logical-AN..

how to softly change fedora basearch from i686 to x86_64

노트북에 설치를 잘못했다. 근데 시스템 날리기가 너무 귀찮다. 처음에는 anaconda로 해결을 볼까 했는데, anaconda는 루트 디렉터리를 꼭 날려야겠단다.직접 커널 컴파일하는 건 그것대로 귀찮을 수가 없다. yum을 쓰는 방법을 고려해 봤다. http://docs.fedoraproject.org/en-US/Fedora/17/html/System_Administrators_Guide/sec-Managing_Yum_Repositories.htmlhttp://fedorasolved.org/browser-solutions/firefox-32bit-on-x86-64-fedorahttp://forums.fedoraforum.org/archive/index.php/t-104347.htmlhttp://archi..

Fedora 18에서 입력 방식 전환에 Alt_R 사용하기

Fedora 18에 와서 ibus의 고질적인 문제는 크게 고쳐지지 않았다. 한글 합성이 커서를 따라다니는 건 여전하다. 물론 일부 프로그램에 즉시 한글 입력이 안 되던 현상은 개선되었는데, 이는 GNOME 3.6이 integrated internal ibus를 갖고 있고 외부 ibus를 허용하지 않는 방식으로 해결된 것 같다. 문제는 노트북, 흔히 그렇듯 Alt_R과 Ctrl_R을 한/영 키와 한자 키로 쓰고 있었다. 한자 키야 여전히 ibus-hangul 세팅에서 변경 가능하지만 (이건 왜 통합 안 했나 모르겠다) 입력 방식 변경은 gnome 쇼트컷 설정에 통합되었다. 오 마이 갓. Alt_R은 등록 불가능. Fedora 18 GNOME 3.6에서 입력 방식 변경 키를 단독 특수 키로 바꾸는 방법은 그..

64비트 MinGW/MSYS 팁

몇 달 묵은 글인데 영원이 묵히는 건 아니다 싶어 마무리함. 윈도우 8도 나왔고이전부터 MS에서 정책적으로 버리던 Win32 static MSVCRT 네이티브 컴파일러 인기도 떨어지지 싶은데Cygwin에 비해 단점도 많지만 MinGW는 아직 써야겠다. 하지만 배포판의 현실은 MinGW/MSYS configure 옵션은 *-*-mingw32 계열. 앞은 호스트, 뒤는 타겟.i686-pc-mingw32i686-w64-mingw32x86_64-pc-mingw32 x86_64-w64-mingw32 참고: http://gcc.gnu.org/install/specific.html 배포되는 GCC 바이너리는 32비트 호스트 32비트 타겟이다. 64비트 시스템에서 보람차게 컴파일해 봤자..;우선 64비트 타겟의 크로스..