2014년 5월 6일 화요일

블로거에서 구글 웹 폰트 사용하기

네이버 블로그에서 벗어나 Blogger에 적응 중인 여자친구를 위해 바칩니다.ㅋ

1. 구글 웹 폰트

https://www.google.com/fonts, http://www.google.com/fonts/earlyaccess

2. 마음에 드는 글꼴 찾았으면, CSS에 추가.

'Blogger 템플릿 디자이너' - '고급' - 'CSS 추가'
link 태그를 사용하던가, import를 사용하던가 해서 CSS에 추가

3. 블로그 글 쓰기 편집기에서 'HTML'로 바꾸고, 바꾸고자 하는 영역을 <span> ~ </span> 태그로 지정

4. <span style="font-family: ~~~">로 폰트 지정

<span style="font-family: 'Nanum Brush Script', cursive;">나눔 붓 글씨</span>

⇒ 나눔 붓 글씨

5. 페이지 전체의 글꼴을 바꾸고 싶은 경우, 템플릿 HTML 편집

템플릿마다 다를 수 있지만, 대충 비슷비슷할 듯?

<head>~</head> 내에 <Variable name="body.font" description="Font" type="font" default="~~~" value="~~~"/>를 찾아서, default와 value 값을 원하는 폰트로 바꿔주면 됨.

자세한 것은 레이아웃용 글꼴 및 색상을 참고하세요. :)

끝!

2014년 4월 10일 목요일

터미널에서 클립보드로 복사 & 붙여넣기

그 동안 터미널의 출력 내용을 메일에 써 넣을 때 양이 너무 많을 경우, 파일로 pipe시키고, 파일 내용 터미널 외의 편집기 프로그램에서 읽어 copy & paste를 해왔다. 매번 파일 만들고, 지우고, 너무 번거로운 것 같아 터미널에서 클립보드로 접근하는 방법을 찾아보니, 역시 방법은 다 있더라.

http://stackoverflow.com/questions/749544/pipe-to-from-clipboard

터미널에서 클립보드 접근하는 방법은 운영체제마다 다 다른데, 내가 사용하는 Mac OS X에서는 pbcopy, pbpaste를 사용하면 된다.

https://langui.sh/2010/11/14/pbpaste-pbcopy-in-mac-os-x-or-terminal-clipboard-fun

2014년 3월 17일 월요일

Safari에서 PDF 뷰어를 Preview로 사용하기

iPhone에서는 Google Chrome보다 Safari의 사용이 편하기에 기본 브라우저를 바꾸기로 결심. 이왕에 바꾸는 김에 데스크탑 브라우저도 바꾸는게 iCloud에 연동 등등에 편하지 않을까 해서 바꿔봤는데, PDF를 브라우저 내에서 보기가 시원치않았다.

해결방법은 생각보다 간단하다.

출처: https://igppwiki.ucsd.edu/groups/publichelpwiki/wiki/a1538/Howto_Disable_Acrobat_as_the_Safari_PDF_Viewer.html

근데 난 Adobe Reader를 설치한 적이 없는데 왜 깔려있는건지 모르겠다.


휴~ 이제 IEEE Xplore에서 논문보기가 편해졌구나.ㅋㅋ

2014년 2월 11일 화요일

ARM용 GNUC 툴체인 삽질

NanoQplus는 실제 산업현장부터 많이 적용되다 보니, ARM 프로세서용 툴체인으로는 IAR EWARM과 Keil MDK-ARM을 먼저 지원하게 되었다. 그 둘은 한 카피 당 가격이 500~600만원을 호가하는 관계로 개인용으로는 적합하지 않다. 그 동안 과제 준비와 업체 지원으로 정신이 하나도 없었는데, 약간 짬이 되는 요새를 틈타 그 동안 미뤄왔던 bare metal용 ARM GCC를 적용해보았다.

툴체인은 GNU Tools for ARM Embedded Processors 4.8. LaunchPad에 둥지를 틀고 있는 프로젝트인데, 가장 최근까지 업데이트를 계속 이어가는 것으로 보인다. 게다가 다운로드 섹션을 보면, Linux 뿐만 아니라, Windows, Mac OS X 버전까지 지원하고 있는 것으로 봐서 믿음까지 간다.

타겟 보드는 STM32 기반 Mango EToI. 조만간 공개될 NanoQplus 공개버전에서 레퍼런스 보드로 활약할 녀석이다. IAR EWARM으로는 잘 동작하는 것을 이미 확인하였으므로, 보드에는 거의 문제가 없다고 봐도 된다.

일단, Makefile은 GCC 패키지 내 샘플을 참조하였다. Linker script는 STM32F10x standard periph library에 있는 예제와 템플릿을 참조하였다.

이제부터 문제 시작!

1. OS interface

시작부터 컴파일 에러를 뱉지만, 당황하지 않고 newlib manual에 나온대로 minimal implementation으로, 끝!

2. main() 진입 전 멈춤

뭐, 쉽게 될꺼라 생각하진 않았지만, main() 조차 들어가지 않으니 당혹스러웠다. Linker script에서는 시작 지점을 Reset_Handler로 지정한 상태. Reset_Handler에서는 data 영역 및 bss 영역 초기화 후, 클럭 설정을 위한 SystemInit()과 main()을 차례로 호출하게 되는 것... 으로만 생각했으나, STM32 라이브러리에 있는 startup 어셈 코드를 잘 보니 그 사이에 __libc_init_array() 를 한번 다녀온다. 구글링을 해보니 C++ constructors를 위한 초기화 코드를 부르는 영역이란다. 헌데, NanoQplus는 C++을 지원하지 않으니 이 부분을 주석 처리했다. 안되는 것도 이상하긴 하지만, 일단 main() 이라도 들어가보자는 정신으로 과감히 제거! LED를 깜빡거리는 데까지, 끝!

3. printf() 호출 시 멈춤

역시 한번에 넘어가주면 섭섭하다. 다시 구글링 결과, printf() 호출 전에는 setvbuf()로 stdin, stdout, stderr용 IO 버퍼를 설정해야 한단다. 버퍼를 사용하지 않으므로, 세번째 인자를 _IONBF로 지정하여, 끝!

4. setvbuf() 호출 시 멈춤

이때부터 제대로 멘붕. 찾다 찾다 비슷한 사례로 data 영역이 초기화 되지 않을 경우, malloc()에서 멈추는 현상이 있다고 해서 의심해보기도 하고, QEMU에서 에뮬레이팅 하려다 실패하기도 하고, OpenOCD로 디버깅 연결을 시도하기도 하고, map 파일과 list 파일 들여다보기를 수차례, 거의 포기 직전까지 갔다. 그러다 map 파일을 보고 '아!' 하는 순간이 왔다. 바로 링킹된 libc.a가 이상한 것을 발견했다. 다시 한번 컴파일러 옵션과 링킹 옵션을 확인해보니 컴파일러에는 -mcpu=cortex-m3 -mthumb가 되어 있는데, 링커에는 -mthumb가 빠져있었다. 그래서 Thumb이 아닌 ARM mode 버전의 libc.a가 연결된 것. 결국 이것도 해결하고, 2번 문제도 원상복구했다. 이것 찾으려고 하루가 꼬박 걸렸네. 암튼, 끝!

5. 멀티쓰레드 컨텍스트 스위칭 중 멈춤

NanoQplus는 멀티쓰레드를 지원하기 때문에 새 MCU를 포팅하거나 새 툴체인을 적용할 때 반드시 통과해야 하는 관문이 멀티쓰레드이다. 특히, 컨텍스트 스위칭 부분은 어셈블리 코드 등으로 구성되며 프로세서나 툴체인에 의존적인 부분이 많아 늘 한번에 통과되지 않는 부분이다. 이번에도 역시 쓰레드간 컨텍스트 스위칭 중 HardFault가 발생하며 멈췄다. 컨텍스트 스위칭 부분의 함수는 어셈블리로 구성된 함수로 보통 함수의 진입과 종료시 붙는 스택관련 시퀀스가 붙으면 안된다. 따라서, __attribute__ ((naked))를 함수선언부에 붙여줘야 한다. 이걸로 끝!

우여곡절 끝에 적용이 끝났다. 물론 다른 것들도 테스트해봐야 하지만, 대부분 STM32 StdPeriph Library에 의존적인 부분이라 잘 통과될 것 같다. ARM GCC가 standard library로 newlib을 이용하기 때문에 혹시나 용량이 너무 커지지 않을까 걱정했는데, 최근에 추가된 newlib-nano (--specs=nano.specs)를 사용하게 하니 용량도 걱정 없을 듯 싶다. 당분간은 ARM GCC만 쓰게 될 듯...

아, 그리고 공개버전용 소스코드도 조만간 공개 예정!

2013년 10월 1일 화요일

IRIS mote에 AVR ISP mkII 연결


IRIS mote는 MEMSIC (구 Crossbow)에서 나온 모트로 ATmega1281, AT86RF230 등으로 구성된 무선 센서이다. 이번에 실험할 일이 있어 안쓰고 있던 IRIS로 테스트베드를 꾸며보려고 했더니 ISP겸 시리얼 로그를 받아보기 위한 USB 인터페이스 보드(MIB520)가 별도로 필요하고, 생각보다 개당 가격이 너무 쎈 문제가 있었다. 아무리 수입품이라지만 개당 20만원이 넘어가는 건 너무하다.ㅠㅠ

그래서 역시 좀 남아있는 AVR ISP mkII를 IRIS에 연결하기로 했다.

재료는 MDA100CB, AVR ISP mkII, NT-USB2UART, 및 기타 케이블 및 납땜용 공구들.


MDA100CB는 MEMSIC 계열 모트를 위한 breakout board이다. 근데 이것도 국내 판매 가격이 20만원대로 장난이 아니다.ㅠㅠ 실험실에 남는게 있어서 다행. 부족하면 커넥터랑 적당한 사이즈 만능기판으로 만들면 될 듯.


NT-USB2UART는 디바이스마트에서 판매하는 CP2102 칩 기반의 USB-to-UART 변환 모듈이다. 테스트베드에서 시리얼 로그를 받아보기 위해서는 필수.

사실 AVR 칩에 ISP 연결은 생각보다 단순하다. 6핀을 칩에 연결만 해주면 끝.


  1. MISO (ATmega1281의 PDO(TXD0))
  2. Vcc
  3. SCK
  4. MOSI (ATmega1281의 PDI(RXD0))
  5. RESET
  6. Ground

그럼에도 불구하고, 이번에 쉽지 않았다. NT-USB2UART랑 ISP를 위한 데이터 전송 핀들이 공유되고 있기 때문에 뭔가 간섭을 일으키는 것 같았다. 에러 메시지는 'MOSI Fail'.

혹시나 해서, NT-USB2UART의 USB 연결을 제거하고 ISP만 연결하니 정상 동작한다. 아무래도 PDI핀이 NT-USB2UART의 data-out 핀에 영향을 받는 것 같았다. PDI와 ISP의 MOSI는 직접 연결하고, PDI와 NT-USB2UART data-out 핀 사이에는 1kΩ 저항을 넣어주니 정상 동작! 이것 때문에 또 하루를 날렸다.ㅜㅜ


이제 4개 완성. 8개만 더 만들면 되겠군....ㅎㅎ;;;

2013년 6월 6일 목요일

바쁘다.

정말 장난아니게 바쁘다.
일단 일은 벌려놔야 수습하면서 다 하게 된다는 평소 신조대로 죄다 벌려놨더니 수습이 안될 정도에 이르렀다.

자정이 거의 다 되어서야 퇴근하는 나날들... 휴일에도 출근하는게 다반사...
그래도 연초에는 즐거운 마음과 긍정의 의지력으로 해나갔는데, 시간이 지나도 완성되는 일의 양보다 새롭게 쌓이는 일의 양이 더 많으니...ㅠㅠ

이대로는 안되겠다. 일단 정리할 일들은 정리하고 서버가 해줘야 할 일들을 만들어놔야겠다. 에휴... 명색이 OS하는 놈이 실생활에서는 작업의 병렬화를 못하고있다니...ㅉㅉㅉ

정신차리자. 하나씩 결과물들을 만들어내고 능력을 입증해보이자. 할 수 있다.

2013년 1월 1일 화요일

Good-bye 2012! Hello 2013!

연말마다 지난 일년을 돌이켜보면 '아~ 다사다난했구나' 하고 느끼겠지만, 2012년은 정말 다사다난했다. 여러가지가 있겠지만, 특히, 현실 정치에 많은 관심을 갖게 된 한 해였다. 물론 다른 20대와 마찬가지로 '나는 꼼수다'의 영향이 컸다. 작년까지는 단순히 나꼼수에서 제기한 여러 의혹들과 폭로에 관심을 가졌던 수준이라면, 올해는 총선과 대선을 겪으며, 보수와 진보의 가치에 대해 직접 생각하고 공부하게 되었다. 그리고 확실하게 진보의 가치를 믿게 되었다. 결국 결과적으로 진보는 패했지만, 그래서 새해 첫날인 오늘까지도 가슴이 쓰라리지만, 평범한 99% 중 한 사람으로써 사회적 약자에 감정이입하며 모순적인 사회 시스템에 대해 계속 떠들고 행동할 줄 아는 한 사람의 지식인이 되기로 했다.

정치 뿐만 아니라 하고 있는 연구에 대해서도 그 맛을 깨우쳐가는 과정에 있는 2012년이었다. 이렇게 된 데에는 최근에 가깝게 지내게된 한 친구가 있었다. 그 친구가 없었다면 나도 모르게 그저 주어진 일만 처리하는 아주 수동적인 연구원이 되고 있었을 것이다. 그 친구에게 정말 감사하다.ㅎㅎ

내가 몸담고 있는 Wireless Sensor Networks 분야가 폭발적으로 성공할 지는 여전히 미지수다. 그러나 인류 생활을 한단계 더 발전시킬 수 있는 핵심 기술이 바로 이 분야라는 것에는 여전히 강하게 믿는다. 지금까지 wireless networking 쪽에만 관심을 가졌었는데, 앞으로는 이를 활용한 센싱 시스템들을 하나씩 만들어볼 생각이다. 데이터들이 쌓아 다른 분야를 연구하는 사람들에게도 도움과 영감을 주고 싶다.

꿈꾸던 2013년은 아니지만, 그래도 시간은 가서 2013년은 오고야 말았다. 최선을 다해 살아보자. 인류의 발전을 위해서...!!