How to use Mantis for UTF-8

mantis는 웹 인터페이스의 버그 트래킹 툴이다. 회사 다닐 때 회사에 적용해보고 싶어서 좀 써봤는데, 실패했다-_- 암튼.. 이 글은 Mantis를 UTF-8로 사용하기 위한 팁이다. 근데 좀 오래되었네….;;;;

——————————————————————————————————–
목차
    1 차례
    2 Mantis 한글 설정(UTF-8)
        2.1 설치 환경
        2.2 설정 순서
        2.3 그래도 안보인다면!

2 Mantis 한글 설정(UTF-8)

2.1 설치 환경

    * 우분투 5.10 Breezy 의 mantis 패키지(따라서 모든 경로는 우분투 기준!)

2.2 설정 순서

   1. mantis 의 설정 파일을 수정하기 위해 연다.

      sudo vi /etc/mantis/config.php

   2. $g_default_language 와 $g_fallback_language 를 ‘korean_utf8’ 로 수정한 후 저장한다.

              $g_default_language     = ‘korean_utf8’;
              $g_fallback_language    = ‘korean_utf8’;

   3. /usr/share/mantis/gui/config_defaults_inc.php 를 연다.

      sudo vi /usr/share/mantis/gui/config_defaults_inc.php

   4. $g_language_choices_arr 에 ‘korean’ 밑에 ‘korean_utf8’ 을 추가한다.

              …

              # list the choices that the users are allowed to choose
              $g_language_choices_arr = array(
                      ‘auto’,

                      …

                      ‘korean’,
                      ‘korean_utf8’,
                      ‘turkish’,
                      ‘ukrainian’

                      …
              );

              …

   5. $g_language_auto_map 에 “‘ko’ => ‘korean'” 를 “‘ko’ => ‘korean_utf8′” 로 수정한 후 저장한다.

              …

              $g_language_auto_map = array(
                      ‘en-us, en-gb, en-au, en’ => ‘english’,
                      ‘zh-cn, zh-sg, zh’ => ‘chinese_simplified’,
                      ‘zh-hk, zh-tw’ => ‘chinese_traditional’,
                      ‘cs’ => ‘czech’,
                      ‘da’ => ‘danish’,
                      ‘nl-be, nl’ => ‘dutch’,
                      ‘et’ => ‘estonian’,
                      ‘fi’ => ‘finnish’,
                      ‘fr-be, fr-ca, fr-ch, fr’ => ‘french’,
                      ‘de-de, de-at, de-ch, de’ => ‘german’,
                      ‘hu’ => ‘hungarian’,
                      ‘it-ch, it’ => ‘italian’,
                      ‘ja’ => ‘japanese_sjis’,
                      ‘ko’ => ‘korean_utf8’,
                      ‘lt’ => ‘lithuanian’,
                      ‘no’ => ‘norwegian’,
                      ‘pl’ => ‘polish’,
                      ‘pt-br’ => ‘portugese_brazil’,
                      ‘pt’ => ‘portugese_standard’,
                      ‘ro-mo, ro’ => ‘romanian’,
                      ‘ru-mo, ru’ => ‘russian’,
                      ‘sr’ => ‘serbian’,
                      ‘sk’ => ‘slovak’,
                      ‘sl’ => ‘slovene’,
                      ‘es-mx, es-co, es-ar, es-cl, es-pr, es’ => ‘spanish’,
                      ‘sv-fi, sv’ => ‘swedish’,
                      ‘tr’ => ‘turkish’
              );

              …

2.3 그래도 안보인다면!

    * /etc/php5/apache2/php.ini 파일을 열어 default_charset 가 지정되어 있는 부분을 주석처리한다. 😛

티스토리로 이전하였습니다.

텍스트큐브의 버그를 해결하다가 링크를 몇 번 날려먹고는 결국 티스토리 이전을 결정했습니다.

아마도 “/etc” 등 /이후의 글자가 있으면 저장이 안되는 문제는 EUC-KR과 UTF-8 문제 인듯 한데, 몇 번의 삽질로도 잘 해결이 안되네요-_-… 링크는 자꾸만 날라가고…….

좀 편하게 살기로 하고 티스토리로 옮기렵니다.

그동안 서버를 제공해주셨던 jachin님께는 다시한번 감사의 말씀을 전합니다. 지금까지 정말 감사히 잘 썼습니다. 감사해요!

제가 제 블로그에 자주 오는 이유 중 하나는 다른 블로그의 RSS 리더로써의 역할도 있었는데.. 이건 어디서 써야할지.. 흐흐..

암튼 새 둥지로 옮겼으니 또 많이 게을러질 것 같습니다. ^^;;

Using POP3, SMTP with SSL

예전에 회사다닐 때 메일 서버 관리할 때 썼던 글인 듯 하다.
언젠가 도움이 되지 않을까 해서 KLDP에 썼던 글을 블로그에도 옮겨둔다.
——————————————————————————————————-
Using POP3, SMTP with SSL

1. 문서의 목적

이 문서는 OpenSSL 을 이용해서 POP3S 와 SMTP 서비스를 시작한 내 경험을 정리하기 위해 만들어졌다.

2. 문서의 소개

이 문서는 OpenSSL 을 이용해 POP3S 와 SMTP 서비스를 사용하는 절차에 대해 설명한다. 레드햇 8.0 을 기준으로 하며 MTA 로는 Sendmail 을 사용한다. POP3S 서비스는 xinetd 하에서 서비스된다. CA 인증은 자체 인증 방식을 사용한다. 모든 작업은 root 로 수행한다. 이 문서는 양정석(dasomoli (at) gmail.com)이 작성하였다. 🙂

3. 본문

3.1. 인증서 만들기 & 설치

    * CSR 을 만든다.
      # openssl req -new > cert.csr

    * common name 에 도메인 이름 입력(예:jinyangind.com)

    * RSA 키를 만든다.
      # openssl rsa -in privkey.pem -out cert.key

    * CSR 에 자체 서명키로 CA 인증서를 만든다.
      # openssl x509 -in cert.csr -out cacert.crt -req -signkey cert.key -days 365

    * RSA 키와 CA 인증서를 붙여 pem 파일을 생성한다.
      # cat cert.key cacert.crt > cert.pem

    * 생성한 파일을 root 외에 읽을 수 없게 한다.
      # chmod 600 cert.pem cacert.crt cert.key(여기는 cert.pem 빼고는 내 추측)

    * SSL 의 certs 디렉토리에 옮긴다.
      # mv cert.pem /usr/share/ssl/certs

      # mv cacert.crt /usr/share/ssl/certs

      # mv cert.key /usr/share/ssl/certs

    * pop3s 의 pem 파일도 만든 것으로 사용
      # cp /usr/shar/ssl/certs/cert.pem /usr/shar/ssl/certs/ipop3d.pem

    * smtps 의 pem 파일도 만든 것으로 사용
      # cp /usr/shar/ssl/certs/cert.pem /usr/shar/ssl/certs/sendmail.pem

3.2. pop3s 서비스 시작하기.

    * #vi /etc/xinetd.d/pop3s

      service pop3s
      {
          disable         = no
          socket_type     = stream
          wait            = no
          user            = root
          server          = /usr/sbin/ipop3d
          log_on_success  += USERID
          log_on_failure  += USERID
      }
        
    * # /etc/init.d/xinetd.d restart

3.3. sendmail 설정하고 재시작하기.

    * # vi /etc/mail/sendmail.mc, 다음 내용을 추가한다.

      define(`confCACERT_PATH’,`/usr/share/ssl/certs’)dnl
      define(`confCACERT’,`/usr/share/ssl/certs/cacert.crt’)dnl
      define(`confSERVER_CERT’,`/usr/share/ssl/certs/sendmail.pem’)dnl
      define(`confSERVER_KEY’,`/usr/share/ssl/certs/cert.key’)dnl
      DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s’)dnl
      Cwjinyangind.com

    * # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
    * # /etc/init.d/sendmail restart

3.4. Client 설정.

    * cacert.crt 배포, 인증기관에 추가.

3.4.1. Outlook

    * 받는 메일 서버, 보내는 메일 서버에 SSL 체크, 보내는 메일서버 포트 : 465, 받는 메일서버 포트 : 995

3.4.2. Thunderbird

    * Outlook 과 거의 같음.

계획과 추정과 측정

계획이 있기 위해서는 그를 뒷받침하는 추정이 있어야 한다.
추정이 있기 위해서는 과거 행위에 대한 측정이 있어야 한다.

나는 참 계획적인 사람이었는데, 언젠가부터 그 추정이 난해해짐으로써 계획이 뒤틀어지는 일이 많아져 계획세우기가 줄어들었다.
추정을 위한 과거 행위에 대한 측정치들이 불규칙했기 때문인 듯 하다.
불규칙한 측정치에 대한 측정들로 인해 추정을 포기하게 되었고,
그 추정치가 불확실함에 따라 계획성이 없어졌다.

그래서 결론적으로 뭔 소리냐 하면.. 무계획적인 삶을 살아가고 있단 얘기지…-_-;;;;;

Professional 소프트웨어 개발

스티브 맥코넬의 “Professional 소프트웨어 개발” 이란 책을 읽었다.
책의 각 장마다 철학자의 명언이나 논문의 문구 등을 적어놓았는데, 말 그대로 ‘명언’이다.

감명받은 몇 개의 문구를 적어보자면..

직접 시도해 보기 전엔 뻔해 보일 것이다.
                                                       – IEEE SOFTWARE

내가 직접 프로그래밍하기 전에 나는 그 문제를 얼마나 가볍게 여기는가! 다른 사람이 한 업적을 얼마나 시시하게 생각했던가! 내 자신에게 반성의 계기를 준 그 문구!

확신으로 시작하는 사람은 의문으로 끝날 것이고, 의문으로 시작하는 사람은 확신으로 끝날 것이다.
                                                       – 프란시스 베이컨

한 문장안에서 저런 비교라니!~ 그렇다. 실세계는 그리고 프로그래밍은! 정말 저렇다!

아는 것이 힘이다
                                                       – 프란시스 베이컨

아는 것이 힘이다. 여기 저기에서 많이 접한 이 말은 그 사람이 어느 범위와 어느 깊이까지 아는 지에 따라 할 수 있는 능력, 즉 힘이 된다는 말이다!

몇 개 더 있지만, 크게 느낀 것은 저 세 개이다. 특히나 “직접 시도해 보기 전엔 뻔해 보일 것이다” 는 며칠동안 계속 머리속을 맴돌았다.

철학자인 베이컨의 말들이 많이 인용되었는데, 윤리 시간에 배웠던 베이컨의 말들이 이렇게 직접 적절한 곳에 쓰여진 것을 보니 신기하기도 하고, 재밌기도 하고.. ㅎㅎ

아무튼, 많은 것을 생각하게 해 준 그 책. “Professional Software 개발”!

서울특별시의회 전자회의시스템 프로젝트 프로그램 개발자 폭행사건

시의회에서의 폭행 사건 같은 건 평소의 나라면 그냥 그러려니.. 하고 넘어갔을 지도 모르지만,
이렇게 화가 나는건 폭행 사건 피해자가 개발자라는 이유때문인지도 모르겠다.
프로그램의 요구사항 파악, 진행 등과 관련된 이 뒤에 감춰진 어떤 이유를 들더라도, 폭행이라니..

다음은 프로젝트를 진행했던 폭행 피해자인 개발자가 데브피아에 올린 글이다.

서울특별시의회 전자회의시스템 프로젝트 프로그램 개발자 폭행사건(http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=69&MAEULNo=28&no=11212)

다음은 네이버에 떴던 관련 뉴스의 내용이다.

서울시의회 사무처 직원, 납품업체 직원 폭행 논란(http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=003&aid=0002349070)

“폭행은 없었다”는 내용이 아주 가관이다..

그리고 다음은 KBS 뉴스의 관련 뉴스이다.

서울시의회 간부, 시민 폭행 물의(http://news.kbs.co.kr/article/society/200810/20081028/1658647.html)

음! 화난다-_-!

Visual C++ 6 SP6에서의 명시적 형변환을 믿지마세요(?)

#include <iostream>

using namespace::std;

int main(void)
{
    float f = 1234567890;
    int i = f;
    int i2 = float(1234567890);
   
    cout << i << endl;
    cout << i2 << endl;

    return 0;
}

위 코드에서 i와 i2가 다를까요? 네. 다릅니다. Visual C++ 6를 쓰신다면요..;;

발견하게 된 계기는 다음과 같습니다.

“The C++ Programming Language” 의 C.6.2.6 부동소수점 실수-정수 변환 절에는 다음과 같은 절이 나옵니다.

반대로, 정수를 부동소수점 실수 타입으로 바꾸는 것은 하드웨어가 허용하는 한 수학적으로 정확히 보장된다. 단, 정밀도가 손실되는 경우는 주어진 정수를 해당 부동소수점 실수 타입으로 정확히 표현할 수 없을 때이다.
    int i = float(1234567890);
int와 float를 32비트로 처리하는 컴퓨터에서는 i에 1234567936이 들어간다.

제 컴퓨터는 int와 float를 32비트로 처리합니다. 따라서 같은 결과를 예상하고 다음과 같은 코드를 작성합니다.

#include <iostream>

using namespace::std;

int main(void)
{
    int i = float(1234567890);
   
    cout << i << endl;

    return 0;
}

결과는?

1234567890

허걱! 뭐야..;; float 형을 32비트로 처리 안하나? sizeof 로 확인해보니 4 랍니다. 그럽 32비트 맞겠죠? float형 정밀도가 저 범위를 모두 처리할 수 있나? 1비트 사인비트에 8비트 지수, 23비트로 mantisa를 처리하니.. 안될텐데;; 1234567890 은 2진수로 “1001001100101100000001011010010” 니까 31비트인데..;; 뭐지..;; 책 내용은 맞는 것 같은데… 까지 생각하고 혹시 컴파일러 문제인가? 하고 2005를 띄웁니다.

같은 코드에 결과는 책과 같은 결과가 나옵니다.

으음.. 그럼 얘는 뭘까 형변환을 명시적으로 안하는 건가 라고 생각하고 그냥 float 형에 넣어봅니다.

#include <iostream>

using namespace::std;

int main(void)
{
    float f = 1234567890;
    int i = f;
   
    cout << i << endl;
 
    return 0;
}

이제서야 책과 같은 결과가 나옵니다. 헐……….. 뭘까요… 얘…..

STL 쓰니 편하긴 하다.. 그렇지만..

컴퓨터비전 숙제로 Component와 Boundary를 구하는 프로그램을 짰다.
Equivalent Table에서 동등한 값들 중 가장 작은 값을 찾을 때, set 써서 동등한 거 보이는 데로 insert해버리고..
set이 내부적으로 정렬해주니.. 그냥 맨 앞에 값 불러다 쓰면 되고.. 참 편하긴 하다..
그치만 set이 내부적으로 정렬해주는 것 때문에 추가된 것만 따로 검색하지 않고 다시 앞에 있는 것부터 테이블을 검색해서 다시 추가해주도록 했으니 여기서는 시간이 마이너스.

그리고 생각해보면 Equivalent table을 pair의 vector처럼 썼으니.. 결국 multimap쓰면 될 걸 링크드리스트에 직접 때려넣어서 순차검색하도록 구현했으니 여기는 구현면에서 마이너스.
게다가 multimap쓰면 table안의 label에 대해서 정렬되니까 안에 이미 있는지 찾는 것도 더 빠를텐데.. 그러므로 시간상으로도 마이너스.

음.. 그치만 오늘은 고치기 싫으므로 또 마이너스..-_-

<아래부터 추가>
multimap 쓰는 것으로 수정. 간단하다. multimap 안에 있는지 검색을 리스트를 순차검색하던 것에서 equal_range를 쓰므로 내부에서 더 빨리 찾을 것으로 생각한다.


데 과연 equivalent table 같은 걸 multimap 식으로 생각해도 될까. multimap 은 “키”에 연관하므로,
equilvalent 짝 중에서 한가지가 키가 됨을 강제한다. 둘은 동등하므로 어떤 것이 키가 될 지 사실 정할 수 없다. 난
짝 중에서 큰 값을 키로 잡았지만.. 작은 값을 키로 잡으면 작은 값이 반복되므로(connectedness를 찾는 과정에서
euilvalent table의 작은 label은 동등한 것들이 계속 나올테니까) 내부에서 트리를 이용한다면, 잘 분포되지 않을
거라는 가정에서.. 잘 분포된 트리가 검색시 더 빠를테니까..

트리로 구성되어 있을 거라는 가정은 Bjarne
Stroustrup의 “The C++ Programming Language(C++ 프로그래밍 언어)” 특별판의 17.4.1.1의
“대개 map은 형태는 조금씩 다를지언정 거의 다 트리로 구현되기 때문에, 반복자 역시 트리 횡단으로 원소 집합을 돌아다닌다.”
라는 구절(한글판 기준)에서 가정한다. 실제 확인은? ..글쎄;;

equivalent table에서 label을
찾을 때는 짝 중 아무값이나 맞으면 그 pair의 다른 짝을 equivalent set에 넣어주어야 한다. 양 쪽 둘다 중에
아무거나 맞는 것을 찾아야 하므로 결국 equivalent table을 모두 검색하도록 만들었는데, 이 걸 어떻게 더 효율적으로
할 수 있는 방법 없으려나.. 항상 모든 걸 다 찾아야 할까…

우분투 화면 효과 상태에서 창이 자꾸 스크린에 붙는 경우

전 창을 이리저리 많이 움직이는 편입니다.

근데 자꾸만 창이 스크린 위아래로 들러붙어서 움직이기 힘들더라구요.

그래서 이게 뭐때문인가 하고 Visual Effect 플러그인들을 찾아보았습니다.

결론은 아래 것 때문이더군요..

사용자 삽입 이미지
꺼주시면 창이 위아래에 띵띵~ 붙어서 늘어나는 등이 되지 않습니다. 흐흐

대학원 생각해본 적은 없지만..

난 절대 우리나라 대학원 같은 곳에 가고 싶었던 적이 없었는데,

이런 글을 보면, 특히나 아는 사람이 쓴 글이라면, 한번쯤 가보고 싶은 맘이 든다.

아.. 재밌겠다.. 부러워라..