제목은 한글문제입니다. 이번에 이야기 할 것은 한컴의 워드프로세서가 아니라 우리가 지금 사용하는 바로 이 한글을 말합니다.


리눅스는 아시다시피 오픈소스로 공개된 커널을 기반으로 이리저리 손을 대서 만들어낸 물건입니다. 따라서 모든 세계인들이 활용 할 수 있게 만들어야 하고 또 그렇게 되고 있습니다. 그런데 워낙 리눅스 이용 인구가 적은 한국은 한글 문제에 자주 봉착합니다. 아니 한글 자체가 문제가 아니라 UTF-8과 EUC-KR의 호환문제, 게다가 Microsoft만 만들고 쓰는 CP949같은 코드 파편화 문제입니다. 사실 한글을 읽고 쓰는 것은 전혀 문제가 없습니다. 유니코드라는 국제 표준이 나오면서 전세계의 언어를 통합 관리하게 되었기 때문에 이 유니코드만 사용한다면 한글문제, 아니 전세계의 모든 언어의 문제는 해결이 가능합니다.


문제는...... 표준을 지키지 않는 것들입니다. 저는 "비표준"이나 "사실상의 표준"을 참 싫어합니다. 비표준이야 어쩔  수 없는 경우가 많다고 해도(예를 들면 M5.5같은 애매한 나사라던가....이건 M5나 M6을 쓰면 안 되나?) 사실상의 표준이라고 이를 고수하는 것도 좀 웃기다는 생각이 듭니다. 사실상의 표준이라면 이를 표준으로 지정하면 되는데 ISO에서 이를 표준으로 지정하지 않는다?

대체 무엇이 문제일까요? 대표적인 것이라면 플래시가 있습니다. 브라우저 플러그인 방식인데다가 멀티코어 사용에 문제가 있고, 어느 한 회사(Adobe)의 독점 형태로 제공되고 있다 보니 문제가 참 많습니다. 하지만 그래픽적 효과를 이렇게 쉽게 보여줄 수 있는 녀석도 없어서 플래시는 지금 웹 그래픽에서는 표준이다시피 합니다. 하지만 HTML5에서 플래시의 기술은 들어가지 않았습니다. 넣으려면 넣을 수도 있었을텐데 말입니다. 그 이유는 모바일 플래시를 써보신 분들은 아시겠지만 엄청난 연산량에 따른 문제라고 하는군요.


그러고보니 반대로 한 회사에서 만들어서 쓰다가 ISO의 표준지정으로 바뀐 기술도 있습니다. 바로 PDF! 그러고 보니 이 물건도 Adobe의 결과물이군요. PDF는 현재 문서표준으로 지정되어 있어서 모든 기술이 공개되어있습니다. 위의 플래시 기술이 완전공개가 되지 못한 것(플래시 기술의 일부는 공개가 되어있습니다. 오픈소스의 결과물이라고는 하지만...)과는 차원이 다르지요.


자 다시 한글 표준으로 돌아와서 이제 어떤 문제가 있는지 확인 해 봅시다. 먼저 MS는 CP949라는 뭔가 해괴한 EUC-KR호환 한글코드를 사용합니다. 그 와중에 내부에서는 유니코드를 사용합니다. (뭐하는 짓이야...) 그리고 KS표준에 보면 EUC-KR과 유니코드를 동시에 올려놓았습니다. 그리고 UTF-8이라는 유니코드와 아스키 호환 코드도 존재합니다. ISO는 당연히 유니코드만이 표준입니다.


네 점점 가관입니다. 특히 KS표준이 참 막장이네요. EUC-KR과 유니코드를 같이 표준으로 채택하는 바람에 통일이 이루어지지 못했습니다. 그럼 CP949는? 이건 표준 아닙니다. 그냥 MS가 만들어낸 확장 완성형 기반입니다. 마치 옛날에 조합형 vs 완성형 싸움 비슷한 생각이 드는군요. 현재로써는 완성형이 이긴 것 같기는 하지만 한/글 워드프로세서가 조합형을 썼기에 지금의 위치에 오른 것을 생각해보면....


이러한 문제는 멀리 갈 것도 없이 UTF-8을 기본으로 사용하는 리눅스/OSX에서 윈도에서 압축한 ZIP파일을 풀면 여실히 드러납니다.한글 파일명이 대책없이 깨집니다. CP949는 EUC-KR 호환이라고 했지요? 원인은 여기있습니다. 때문에 반디집같은 프로그램은 UTF-8환경을 한번 거치는 것 같기는 합니다만,(한글이 아닌 다른 외국어로 쓰인 파일명을 읽기 위함 그런데 이것이 UTF-8에서 압축한 한글에도 먹히는 것입니다.)


언제나 매번 문제를 일으키지만 해결될 기미가 안 보이는 한글문제... ISO의 권고사항만 지키면 큰 문제는 없을 것 같은데 왜 안 지키는 사람들이 많을까요? 제발 적당히 배운티 내지 않았으면 좋겠습니다.

,

이번에는 무진장 딱딱하고 재미없는 글을 올릴 차례입니다. 물론, 지금까지 재미있는 글은 없었지만 이번에는 더 딱딱한 이야기를 해보려 합니다.


많은 사람들은 아직도 리눅스를 엄청 딱딱하고 어려운 운영체제로 알고 있습니다. 원인이야 뻔하지만, 리눅스를 사용해본 사람들은 리눅스 자체가 어려운 것이 아니라 사용 방법이 틀렸다는 것을 알고 있습니다.


사실 리눅스를 데스크탑 운영체제로 사용하게 된 것은 그리 오래되지 않았습니다. 리눅스는 사실 서버 워크스테이션에 쓰이던 Minix의 카피였고(리누즈 토르발즈 자서전에 나와있습니다.) 그 리눅스라는 커널보다 사용자의 완전 분리라는 독특한 매력에 사람들이 빠졌다고 합니다. 즉, 한 컴퓨터에 여러사람이 달려들어도 서로 다른 환경을 쓰는 것 같은 느낌을 줬다고 합니다. 윈도 사용자분들은 1인 1PC시대에 살고 있는데다가 보통 관리자 모드로 사용하기 때문에 (UAC로 어느 정도 막고는 있지만)어떤 것인지 잘 모르겠지만, 관리자는 따로 있고 사용자들은 오로지 User모드만 사용하는 것이지요. 어떤 프로그램을 설치하고 싶으면 관리자에게 연락해서 설치해 달라고 해야 했고, 그 관리자의 계정은 언제나 root였기에 root계정이 해킹당하면 말그대로 시스템이 장악되었습니다.


무슨 소리인지 잘 모르겠다고요? 그냥 당시의 컴퓨터는 원격으로 접속해서 사용해야만 하는 컴퓨터였고(그래서 워크스테이션이라고 따로 지칭한 것입니다.) 이 때 관리자와 유저는 엄격히 구분되어야 했습니다. 사실 Unix시스템의 전반이 다 그러했습니다. 그런데 리눅스가 어렵다는 편견은 아마도 여기서 시작된 것 같습니다.


사실 윈도는 윈도XP시절부터 사용자를 제대로 분리하기 시작했습니다. 그전의 98시절에도 충분히 사용자분리 옵션은 있었지만 바탕화면이 공유되는 등(...) 말도 안되는 사용자 분리를 택했기 때문에 아무도 그런 기능이 있었는지도 몰랐습니다. 심지어 어떤 사용자모드를 쓰더라도 시스템의 근본까지 장악 가능했으니(리얼 도스모드 진입가능→ 하드웨어 직접 접근 가능)사용자 분리의 이점이라고 눈꼽만큼도 없었습니다. 대신 그만큼 개인이 신경 쓸 거리는 줄기는 했습니다. 그러다가 윈도NT계열이 가정용으로 들어오면서(즉, XP시절 이후를 말합니다.) 기존 NT가 했었던 것처럼 사용자 분리를 시도했는데 현실은 그냥 유저 구분없이 모두함께 관리자 모드로 사용... 윈도 비스타시절부터 UAC란 놈을 들고와서 관리자 권한이라도 경고를 한다던가 한번 필터링을 하는 방식도 취해봤지만 이미 전반적인 생태계가 관리자 권한을 요구하는 괴상한 형태로...


즉, 윈도 사용자들은 권한 분리가 익숙하지 않습니다. 그에비해 워크스테이션으로 시작된 OS인 리눅스는 이를 엄청 중요시 여깁니다. 관리자 권한 해킹당하면 해당 워크스테이션을 사용하는 모든 사람들의 정보가 전세계로 솟구칠테니까요.(혹은 삭제당하거나) 처음 리눅스란 것을 본 사람들은 여기서 짜증을 내기 시작했'었'습니다. 왜 과거형이냐면 기존 윈도 사용자들이 UAC덕에 관리자 권한으로 실행하는 것에 익숙해지기 시작했거든요. 물론 아직도 UAC가 뜨면 당황하는 사람들이 태반이기는 하지만 이제 좀 관리자 권한에 대해 이해를 하기 시작한 사람들이 보입니다. 그런 사람들에게 리눅스를 보여주고 su나 sudo 혹은 gksu같은 명령을 알려주면 그게 "관리자 권한으로 실행"이라는 것을 곧잘 이해하더군요.

(물론 아직도 이해 못하는 사람 많습니다. 왜 관리자 권한이 필요한 이유조차 모르기 때문이지만...)


그런데 우분투같은 사용자 편의를 중시한 배포판에서는 언제부터인가 관리자 권한 확인이 UAC 비스무리한 모습으로 만들어지더군요. 즉, 권한분리에 익숙치 않은 사용자들을 위해서인지 그냥 권한 분리를 윈도스럽게 해놓았습니다. 우분투가 쉽다고 하시는 분들 중에는 이러한 이유도 있습니다. 다른 배포판에서는 기본 세팅상태를 기준으로 유저모드로 sudo 명령을 쓰면 대부분 안 먹습니다!(데비안이나 페도라 기준) 우분투처럼 쓰고 싶으면 /etc/sudo내의 있는 설정파일을 수정해야만 하고 수정을 하려면 root로 로그온 해야합니다. 즉, 관리자의 손길이 필요하다는 것이지요. (이 이야기는 데비안 기준이고 페도라는 좀 다르다고 알고 있습니다.)아, 대신 우분투는 root권한 자체가 숨겨져 있습니다. 마치 윈도에서 Administrator계정이 안전모드에서만 나오는 것과 비슷합니다.


이쯤되면 리눅스는 어렵다는 것은 일부 배포판에 한정해서이기는 하지만 조금 완화 되었을 것이라고 생각이 듭니다. 자신의 정체성 중 일부를 수정하면서 까지 윈도스럽게 수정했으니까요. 소프트웨어의 부재는 전에도 말했듯이 wine이나 Virtualbox로 극복이 가능한데다가 전용 소프트웨어도 상당히 훌륭합니다.예전에는 제품개발은 어쩔 수 없이 윈도에서 했지만, 요즘은 제품개발도 리눅스에서 가능해져 가고 있습니다.(DraftSight와 CATIA의 wine 실행 - 이놈은 태생이 유닉스 용입니다.)

리눅스가 어렵다는 것은 편견이라고 했습니다. 리눅스의 대표적인 데스크탑 배포판인 우분투는 이미 윈도 사용자를 상당히 배려했습니다. 그런데도 많은 사람들은 리눅스를 어려운 운영체제로 믿고 있습니다. 일단 까더라도 사용해보고 깠으면 좋겠습니다.

,


이 놈이 바로 Arduino Mega. 포트가 많아서 출력이 많이 필요할 때 유용하게 쓰인다.


얼마 전에 아두이노 Mega 2560보드로 프로젝트를 잠시 진행한 적이 있었습니다.

캐릭터LCD를 붙여서 LCD에 글씨를 띄워야 하는데 자꾸 LCD에 글자가 깨지는 현상이 일어났습니다. 이유는 잘 모르겠는데 어찌어찌 하다 보니 글씨가 제대로 뜨기는 하더군요. 어쨌건 이후로는 정상적으로 작동하길래 그 날은 그냥 넘어갔습니다.


그런데 해당 문제가 다음날 또 터지더군요. LCD에서 글씨가 또 깨지더군요. 이유가 뭔지 잘 몰라서 난리를 치던 중에 프로그램 문제인가 싶어서 PC에 아두이노를 연결하자 정상적으로 LCD에 글씨가 뜨기 시작했습니다.


...사실 그동안은 전력 수급 문제로(LCD가 생각보다 전력을 많이 필요로 합니다. USB만으로는 좀 벅찰 정도입니다.)9V 어댑터를 연결해서 쓰고 있었는데 USB연결 없이 어댑터만 연결하자 LCD에 글씨가 깨지는 것이었습니다. 어댑터 문제인가 싶어서 어댑터 전압을 측정했더니 9V로 아주 쌩쌩하게 잘 돌아갔습니다. 사실 7V만 나와도 정상 작동 되어야 하는 것이기에(아두이노는 7~12V 어댑터를 연결하면 알아서 자체적으로 5V,3.3V로 알아서 낮춰서 잘 돌아갑니다.) 어댑터가 문제였을리는 거의 없습니다.


그래서 결국 아두이노 보드를 시험하던 도중 5V 출력단에서 전압이 이상하리만큼 낮은 것을 확인했습니다. 3.3V남짓 나오더군요. 그 옆에 있던 3.3V 출력단은 어떤가 봤더니 당연하게도 3.3V가 나오고 있었습니다. 즉 3.3V는 정상.


5V 출력 포트와 3.3V 출력 포트. 여기와 관련된 곳이 바로 어댑터 연결잭 근처에 있는 레귤레이터다. 즉 저놈이 전압 불안정의 원인

그래서 혹시나 하고 인터넷에 5V 출력 관련 이슈가 있나 해서 찾아보니 이슈가 있는 것인지는 모르겠지만 외국에도 사례가 있더군요.

http://www.instructables.com/id/Fix-a-fried-Arduino-Mega/#step1


Fried-Arudino...일명 날아간(튀겨진?) 아두이노 살리기.


아무래도 제 예상입니다만 LCD를 달면서 전류가 혀용량을 넘어섰고, 그에따라 레귤레이터가 맛이 갔는지도 모르겠습니다. 어쨌건 해당 글에는 레귤레이터를 아에 갈아버리더군요. 그것도 원래 아두이노에 달려있던 SOT-223대신 LM7805로 바꿔버렸습니다.


SOT-223도 괜찮은 칩이기는 한데, LM7805가 아무래도 신뢰도가 워낙 좋다 보니 이해가 가더군요.(LM시리즈는 전자상가에서 쉽게 구할 수 있는 데다가 실습 교재로 엄청 많이 쓰입니다.) 게다가 학교에서 수리 하다보니 LM7805는 워낙 남아돌아서(...) 저 사이트에 나온대로 바꿔보기로 했습니다.



그런데....

레귤레이터의 납이 안 떨어지네요...아무리 인두로 지져도 인두 온도가 낮은 것인지 저 칩을 뗄레야 뗄 수가 없었습니다. 그래서 그냥.... 


 해당 사이트를 참고해서 Vout부분인(즉, 원래 5V가 나왔어야 했지만 맛이 가서 3.3V가 나오는) 가운데 다리(*ㅡ_ㅡ*)를 잘랐습니다. 쉽게 말해서 그냥 보드에서 안 떨어지니 그냥 고자(...)로 만들어버리는 것으로 결정.


그리고 새로이 7805를 기존 레귤레이터 다리에 위치에 맞춰서 그대로 납땜을 했습니다.

SOT-223은

1pin GND

2pin Vout

3pin Vin

이지만,

LM7805는

1pin Vin

2pin GND

3pin Vout

입니다.

즉, 중간에 다리가 꼬이는데 혹시라도 있을 합선을 방지하기 위해 가운데 다리에 수축튜브를 끼워넣어서 절연을 해줍니다.

자세한 내용은 위의 링크가 걸린 사이트를 참조하시면 편하고, Vin의 위치가 1-3이니까 기존 레귤레이터와 LM7805가 서로 마주보게(...) 납땜 해주시면 편리합니다. 즉, LM7805의 2번 다리와 3번 다리를 서로 엇갈리게 꼬고 LM7805의 1번 다리와 기존 레귤레이터의 3번 다리가 만나도록 납땜 해주셔야 합니다. 혹시라도 잘못 연결하면 레귤레이터에서 연기가 피어오르는 것을 감상하실 수 있습니다.


7805를 아두이노에 납땜한 모습 테스터기로 찍어보자 딱히 합선은 없었다.

어쨌건 레귤레이터도 바꿨겠다. 어댑터 연결후에 5V포트의 전압을 측정하자 5V 칼전압이 나옵니다. Wow!


LCD를 연결하자 LCD에 글씨 엄청 잘 뜹니다. 역시 전압이 문제였다고 밖에는....일단 7805는 열이 많이 나오는 소자라서 방열판을 붙여줘야 합니다. 7805파는 가게에서 방열판도 같이 파니까 꼭 방열판을 달아놓으세요. 안 그러면 저 7805도 맛이 가는 수 있습니다. SOT-223은 잘 모르겠지만 7805는 그만큼 허용 전류량도 높으니 전류를 많이 뽑아먹어도 이제 큰 무리는 없을 겁니다. (못해도 1A는 버틴다고 하네요.)만세!




추가 이야기

아두이노에 가변저항 없이 LCD연결하기.


보통 아두이노 예제에서 LCD연결 회로는 다음과 같습니다.


저 가변저항이 무슨일을 하는가 봤더니 LCD 글씨의 대비를 조절하는 것이라고 합니다. 즉, 전압을 조절해서 LCD의 어두운 부분을 만드는 전압을 설정하는 것인데, 까놓고 말해서 가변저항 달기도 짜증나서 이를 간단히 하는 방법을 알려드리겠습니다.


우선 저 가변저항이 없으면 글씨가 무조건 까만 사각형으로 나오게 됩니다. 그리고 가변저항을 돌리다 보면 어느 순간 글씨가 보이는데 그 글씨가 보이는 수준은 LCD마다 제각각입니다. 기준전압이 지들 마음대로인데 보통은 5V짜리 기준으로 2.5V입니다. 즉 반정도 돌리면 보입니다. 그런데 가변저항을 달 생각하니까 그냥 짜증이 나더군요. 그래서 회로를 살짝 수정했습니다.




저 갈색선이 보이시나요? 아두이노의 6번핀과 LCD의 Contrast핀을 직접 이었습니다.


6번핀이 뭐냐하면 PWM지원 핀입니다.

analogWrite(~~,~~);

이 코드가 먹히는 핀이라는 것입니다. 물론 6번핀 말고도 PWM지원 핀이면 어디에 연결해도 상관은 없습니다.


analogWrite(6,120);//6은 6번핀이라는 의미 120은 듀티비가 120 즉, 출력 전압은 120/255 * 5V


위의 코드를 Setup()함수 내에 적어주시면 가변저항 없이도 LCD의 글씨가 보일 것입니다. 좀 까맣다 싶으면 120보다 낮은 수로 바꿔주시면 되고 너무 하얗다 싶으면 120보다 높이면 됩니다. 일부 LCD는 반대일 수도 있습니다. 어쨌건 저 숫자를 바꿔주면 조절이 됩니다. 심지어 머리를 조금만 더 쓰면 대비 조절을 별도의 스위치 조작이나 PC연결로 할 수도 있습니다.


보드가 깔끔한 것을 원하신다면 이 방법을 추천드립니다. 가변저항은 좀 불편하니까요. 디지털 방식도 나쁘지는 않다고 생각합니다.

,