MoniWiki의 {{{#!vim … 에서 한글이 깨질 경우

모니위키를 사용할 때 {{{#!vim java 식으로 코드를 넣을 때가 있습니다. 이 때 한글이 깨진다면 역시나 인코딩 문제때문에 그런 것인데요 다음과 같이 해주시면 됩니다.

config.php 안의 vim_option 변수를 수정해줍니다.

Before
$vim_options=’+”set expandtab” +”retab”‘;

After
$vim_options=’+”set expandtab” +”retab” + “set enc=utf-8″‘;

오픈소스가 활성화되지 않는 이유 “아무도 가르쳐주지 않기 때문이다”

 얼마전 흥미로운 글을 우연히 보게 되었습니다.
우리나라에서 오픈소스가 활성화되지 않는 이유에 대한 yundream 님의 오픈소스가 활성화되지 않는 이유 글을 보게 되었는데 그 트랙백으로 걸린 Mr. Dust님의 오픈소스가 활성화되지 않는 또 다른 이유 라는 글을 읽게 된 것이죠.

두 글 모두 제 맘에 와닿는 글들이었고 특히나, Mr. Dust님의 글 중 우리나라 오픈소스가 활성화되지 않는 이유는 “아무도 가르쳐주지 않기 때문이다” 라는 이유는 매우 크게 동감합니다.(편견 부분 역시 뭉클합니다)
오픈 소스에 관심을 기울이게 되어도 막상 진입점이 어디인지 쉽게 찾을 수 없고(제가 좋아하는 KLDP는 제가 보기에는 아직 그런 역할을 하고 있지 못합니다.), 찾아봐야 국내 정보는 별로 없고 영어 천지인데다, 국내 IRC나 관련 사이트를 가보아도 무성의한 답변 혹은 무시받는 일이 흔하기 때문이죠. 일례로 HanIRC의 #linux 채널이나 기타 채널들도 초보 무시하기, 사람 깔보기, 막말하기 등은 흔히 볼 수 있는 풍경입니다. 대놓고 “여긴 원래 이래요!” 라는 기존분들의 인식도 꽤나 한몫할겁니다.(근데 이런 분들 치고 “진짜” 오픈소스 참여자는 없는 것 같더군요.)
결국 오픈 소스를 하려면 정말 아무것도 없는 상태에서 “맨땅에 헤딩하듯” 하는 방법부터 찾고 찾아 하게 되고 이렇게 조금씩 지쳐가면서 처음의 의지마저 조금씩 사그러들고 말죠.(이런 의미에서 “오픈소스에 뛰어들기” 같은 행사는 매우 긍정적입니다.)

뭐 그렇다고, 기존 오픈소스하시는 분들에게 “하는 방법 좀 남겨!”하고 강요할 수도 없는 노릇이긴 합니다만, 오픈소스에 접근하는 방법에 대한 체계적인 정리와 기존 참여자들의 인식 전환 혹은 조금더 둥글어지기;는 될 수 있는 한 빨리 되어야 할 것입니다. 저 역시 ubuntu-ko에 가입하고, launchpad.net 에서 우분투 패키지 번역에 대한 튜토리얼 같은 걸 만들려고 생각했던 적이 있습니다만, 생각뿐.. 여태 못하고 있네요.

오픈소스에 대한 학생 입장에서의 글은 조금더 생각이 정리된 후에 포스팅하는게 좋을 것 같습니다.(막~~~~~ 썼다가 지우고 지우고..)

버클리 DB에 대해서 알아봐야겠습니다.

전부터 파일기반 DB(라고 불러도 될까요?)인 버클리 DB에 대해서 알아보자!고 생각해오곤 있었는데 역시나 게을러서 이제껏 쳐다보지도 않고 있었네요.(이런게 아주 많이 있습니다. 블로깅 API, RSS 인증, 오픈 맵 데이터, NTFS 구조, PyGTK 등등..)

멤버십에서 DB관련 프로젝트를 시작했는데 SQLLite나 버클리 DB, 둘 중 하나의 DB를 참고해서 프로젝트를 진행해야 할 듯 싶습니다. 팀원들의 생각은 다를 수 있겠지만요~

일단 간단하면서도 폭넓게 사용되는 버클리 DB에 대해서 (저혼자) 알아보기로 했습니다.

Sun 소식지에 다음과 같은 기사가 있네요.

http://kr.sun.com/korea/sun_info/2004/web_spring/sunintrend/trend02.html

몇 가지 자료들을 더 찾아보고 소스도 한번 들여다 볼까 생각(만?)중입니다~

졸음 버그

글에 앞서 프로그래머를 졸린 상태에서 일하도록 하면 안된다고 강력히 주장합니다.

제가 요즘 좀 많이 바쁩니다.

Todo list로 적어봤더니 노트가 꽉차더군요-_-

어제 밤에는(정확히는 오늘 6시까지) 과제기획서를 위한 자료 준비를 하고 6시부터 아르바이트로 하고 있는 프로그램을 코딩했습니다. 코딩 중에는 정말 난리도 아니었죠. 졸린 눈 비비고 깜빡 졸았다가 다시 타이핑하고, 커피를 냅다 위에다 붓고.. 이게 수요일까지 완성되어야 하기 때문에 정말 바쁩니다. 게다가 전 다음주 일요일부터 시험이라구요! 이번주 일요일까지는 과제 기획서, 기말 프로젝트 보고서를 제출해야 하고, 화요일까지 프로그래밍 과제도 있고, 수요일까지 프로그래밍 및 UML 보고서를 제출해야 하고, 같은 날에 Vigenere 암호 해독 프로그램을 작성해야 하며 시험기간이 끝나자마자 알고리즘 22개에 대한 설명과 최선, 최악, 평균에 대한 예제를 만들어서 손으로 풀어서 제출해야 하고, 프로그래밍 언어론에서 프로젝트를 진행할 언어를 선정하는 게시글을 올려야 하며, 토론글을 작성해야만 합니다.(그렇지만 더 나쁜 건 이게 다가 아니라는 겁니다. 더 많이 있어요-_-) 잠을 줄이지 않고는 할 수가 없겠더군요.

그래서 잠을 줄였습니다.

그 결과로 아침에 다음과 같은 코드를 작성했답니다.

   for(i = 0; 1 < 10; i++)    {
       ar >> sData.inclineStart    [i];
       ar >> sData.inclineEnd        [i];
       ar >> sData.inclinePercent    [i];
   }

뭐가 잘못됐는지 보이시나요? 저는 제가 평생 이런 코드를 짜지 않을 거라고 생각했습니다. 저런 코드를 짜는 프로그래머는 “죽어야 된다”고 생각했죠-_-;;; “어떤 바보멍청이가 저런 코드를 짜?” 라고 생각했죠. 그 바보 멍청이가 오늘 제가 될 줄은 꿈에도 몰랐답니다.

이 것 말고도 몇가지 사고(!)들을 일으키는 코드를 아침에 수없이 양산해냈죠; 저장을 두 번 한다던지.. 배열의 index를 다른 변수의 index와 헷갈린다던지.. 이게 저 혼자 짜는 프로그램이니 다행이지 협업되서 돌아가는 프로그램이었다면 어땠을지 정말…

음주 코딩, 졸음 코딩.. 정말 없어야 합니다. 음주 코딩이나 졸음 코딩을 해야 할 정도로 프로그래머를 괴롭히지(!) 마세요. 두배, 세배, 열배, 백배가 되어 다시 돌아옵니다.(대부분 프로그래머에게 다시 돌아오게 되어 프로그래머를 더 힘들게 하긴 합니다만)

근데 지금도 정말 졸립고 힘드네요.

MIPS 시뮬레이터의 버그

학교에서 컴퓨터구조 수업을 듣는 중입니다.
IA-32(교수님 표현을 빌리자면 걸레-_-) 구조가 아닌 간단한 MIPS 아키텍처에 대해 배우고 있는데 MIPS Instruction set 을 이용해서 간단한 ASM 프로그래밍을 과제로 내주셨기에 어제 열심히 했더랍니다. 시뮬레이터로는 PCSpim 이라고 하는 윈도우즈 기반(이 것부터 잘못일지도 몰라요-_-) 시뮬레이터를 썼습니다. SPIM 은 Unix/Linux 기반의 콘솔 환경에서 사용할 수 있는 도구입니다. PCSpim은 그를 윈도우즈의 GUI 환경으로 만든거구요.

그런데! 아무리해도 원하는대로 답이 안나오는 겁니다!

답이 안나오면 가장 먼저 의심하는건 접니다-_-;; PC는 거짓말을 하지 않잖아요?
이거 뭔가 이상하다고! 컴파일러가 잘못되었다고! 외쳐봐야 나중에 보면 결국 자기 탓이기 마련입니다.

그런데 어제는 아니더군요.(컴파일러는 아니니 그럴 수 있는 건지도 모르겠지만요~ 😉 )
코드를 열심히 들여다보고, 내 능력이 이 거 밖에 안되나~ 한숨도 쉬어보고, 다시 아무리 코드를 들여다보면서 돌려봐도 안되는 겁니다. 난감하더군요.
결국 차례차례 나눠서 한 스텝씩 진행해보았습니다. 자세히 한스텝씩 진행하며 살펴보니 이 PCSpim 이란 놈이 자기 멋대로 Stack Pointer Register 값을 바꿔버리고 있더군요. 그래서 $SP 의 값을 가지고 리턴하는 부분에서 엉뚱한 곳으로 리턴하면서 Exception을 툭툭 뱉어내고 있는 것이었습니다.

사용자 삽입 이미지
jump전의 $SP값

사용자 삽입 이미지
$SP값이 제멋대로 바뀌었다!

그래서 바로 리눅스로 재부팅하고! 우분투의 소스리스트에 있는 SPIM 을 설치하려고 했으나 제대로 동작하지 않길래 소스를 받아다가 소스 컴파일하고 설치를 했죠.

바로 결과가 나오더군요-_-… 아까운 제 3시간은 그렇게 흘러갔습니다. 버젼이 7.3이나 되는 놈이 이럴 줄은 몰랐답니다ㅠㅠ

추가 : 다른 컴퓨터에서는 제대로 돌아가길래 PCSpim을 재설치하고 다시 해보았는데도 안됩니다. 그래서 뭔가 이상하다 생각하고는 Simulator 메뉴의 Settings… 에 있는 옵션들을 건드려보았는데 Delayed Branches 와 Delayed Load를 체크상태로 두면 (제 노트북에서만) 제대로 동작하지 않습니다. 이게 어떤 역할을 하길래 $SP 값을 마구 바꾸는 건지 모르겠네요. 게시판에 질문을 올렸는데 답변이 오면 또 추가하도록 하겠습니다.

SW Engineering – 2007.3.13

Issues of professional responsibility

– Confidentiality
– Competence
– Intellectual property rights
– Computer misuse

ACM/IEEE Code of Ethics(윤리 강령)

1. Public
   SE shall act consistenty with the public interest.
2. Client and Employer
3. Product
   가능한한 표준에 맞춰 개발해야 한다.
4. Judgment
5. Management
6. Profession
7. Colleagues
fair, supportive
8. Self

Ethical dilemmas

What is a system?

System Categories

– Technical computer-based systems.

– Socio-technical systems.

Socio-technical system characteristics

– Emergent properties
– Non-deterministic
   같은 Input에 대해서 늘 같은 Output을 생성해내지 못한다.
– Complex relationships with organizational objectives
   시스템 자체의 요소만 영향을 미치지는 않는다.

Emergent properties

   – 시스템 전체의 특성
   – 컴포넌트간의 관계로서 발생하게 되는 특성
   – 처음 integration 후 평가하고 측정 가능

Examples of emergent properties

   – Volume : 시스템의 배열에 따라 달라진다.
   – Reliability : 하나하나는 Realible할 수 있지만 하나로 integration되었을 때는 서로간의 iinteration에 대해서 영향을 받으므로 전체적으로는 달라질 수 있다.

오픈소스?

개인적으로 오픈소스에 관심이 많습니다.
개발자라면 공개된 소스에 관심이 많은 것은 당연하겠죠.
저 역시 오픈 소스 커미터가 되었으면 하는 막연한 생각은 합니다. 일단 멋지지 않은가요? 😉

오픈 소스 애플리케이션을 쓰면서 소스코드에 주목하지 않는 것은 저 역시 마찬가지 입니다. 다만 뭔가 불편한 사항이 생겼을 때, 그리고 시간적 여유가 있을 때는 조금 다르죠.
오픈 소스 애플리케이션을 사용하다가 불편한 것이 있다면, 그리고 능력이 허락된다면, “에이~ 왜 이거 안돼!” 하면서 소스코드를 보면서 고쳐볼 수 있습니다.
제가 해본 유일한 경험은 우분투를 사용하면서 FTP 클라이언트인 gftp 프로그램의 파일이름의 원격인코딩이 제대로 적용되지 않는 것을 보고 gftp의 소스코드를 제맘대로 수정해서 원격인코딩을 구현해 본 것 뿐입니다.(나중에야 안 것이지만 비슷한 기능을 gftp 메일링 리스트에서 중국인이 패치한 것이 있다고 하더군요. 그래도 제 패치가 더 좋습니다. 😛 전 Upload & Download 시에도 원격 인코딩 설정에 맞춰서 파일이름을 변경하게 했거든요. 패치를 원 개발자에게 이메일로 보내긴 했습니다만, 코드의 품질 탓일까요? 반영되진 않는 것 같군요;;)

윗 글에서는 오픈 소스 커미터가 되어 보자고 권장하고 있습니다. 전체적인 질을 높이자는 것이죠. 찬성합니다! 저 역시 제 시간이 허락하는 한도 내에서 그렇게 하고 싶고, 막연히 생각하고 희망하는 “오픈 소스의 발전”에도 도움이 될 것 같아서 말이죠.(받은 만큼 돌려준다. 제 기본적인 마인드입니다.)

결론은 리눅스 또는 소프트웨어 개발에 관심이 있는 분들이라면 오픈 소스에 참여해 보시기를 저 역시 권하고 싶습니다.(일단 저부터 해야겠지만요; )

p.s : 윗 글의 제목과 글을 보았을 때 제목에서 나오는 오픈소스 코드가 가지는 의미는 없다는 것으로 오해할 만 하군요; 이에 관해서 KLDP 에 권순선님이 트랙백 하신 글에 달린 원 글 주인의 댓글을 인용합니다.

오픈소스코드 활용의 자유가 얼마나 큰 의미가 있고 중요하다는 것은 충분히 잘 알고 있습니다. 고객이나 주변 사람들에게 항상
그런 얘기를 하고 더 나아가 코드의 활용을 통해서 얻을 수 있는 가치가 얼마나 큰지에 대해서도 자주 강조하는 편입니다. 작년엔
마소에 “오픈소스의 소스코드는 개발자를 위한 숨겨진 보물이다”라는 내용의 글을 쓰기도 했습니다.

하지만 그런 얘기들이 점점 공허하게 느껴졌습니다.

오픈소스 제품의 사용자(많은 개발자들은 라이브러리나 프레임워크의 사용자입니다)들은 점점 자신이 사용하는 것이 오픈소스라는
것에 의미를 두지 않습니다. 소스코드의 존재여부 자체에 관심도 없습니다. Free/OSS라고 하면 대부분 “공짜”라는 것에만
관심을 둡니다.

반대로 소스코드가 뭔가 대단한 것을 줄 것이라는 환상에 빠져있는 사람도 많습니다.

의미라는 것은 결국 어떤 것이 가지는 “가치”라는 뜻입니다. 저는 의의(significance)가 없다고 한 것이 아니라
개개인에게 현실적인 의미(meaning)나 가치(value)가 없다고 얘기한 것입니다. 현실적으로 각종 차별이 견고하게 존재하는
한국에서 “평등”이라는 헌법조항이 무슨 의미가 있냐고 항변하는 것과 마찬가지 입니다. 물론 그 평등조항이 있기 때문에 넓게 보면
얼마나 큰 혜택을 받는지 알 수 있겠죠. 하지만 그것이 존재의미가 있다고 해서 현실에서 차별당하는 사람에게 “헌법에는 평등권이
있어”라고 얘기해주는 것이 현실적으로 무슨 유익이 있겠냐는 것입니다.

물론 극히 좁은 시각과 제한된 관점에서 나온 발언인 것은 인정합니다. 제 최근의 경험 때문에 그런 말을 꺼낼 수 밖에
없었습니다. 소스코드에 대해서 막연한 환상을 가지고 있다가 나중엔 그 존재 의미조차 부정할지도 모르는 사람들에게 좀 더
“현실적”이 되자는 얘기였습니다.

그리고 진정한 그 존재 의미를 이해하고 그 가치를 누리며 적극적으로 활용하는 소수의 사람들이 있겠죠. 그들을 무시한 것은 절대 아니기에 저는 이 포스트의 제목에 고쳐 쓰신 것처럼 “아무” 의미가 없다라고는 하지 않았습니다.

마지막으로 오픈소스의 소스코드는 저한테는 개인적으로는 큰 의미가 있습니다. 저는 그 가치를 충분히 누리고 있고 그 점에
대해서 항상 감사하게 생각하고 있습니다. 하지만 이제는 다른 사람에게 그렇게 너도 하라고 “강요”할 욕심은 버렸습니다.

C 코드 최적화에 관한 글

C 코드 최적화

ARM 기반의 C 코드 최적화에 대해서 다루었다고 합니다.
저 개인적으로는 회사에서 했었던 프로젝트에 적용했던 것들이 몇 개 눈에 띄네요.
17번 같은 경우는 정말 독특하군요~ 저런 방법이 있을 줄이야!
나머지들도 특정 상황에서는 꽤 도움이 될 듯 싶어 블로그에 남겨둡니다.

관심있으신 분들은 한 번쯤 읽어보세요~!
답글에 오하라 님이 남겨주신 글도 꼭 한번 봐야겠군요. 🙂