2012년 8월 9일 목요일

파이썬에서 역인용부호(`)의 쓰임

ps. 요즘 틈틈이 파이썬을 공부하고 있습니다. 인터넷에서 강좌를 따라서 조금씩 하고 있는데 쉽고 제미있네요. 복잡하지 않으니 배워보시는 것을 추천하고 싶습니다.

  강좌의 소스에서 역인용부호(`)라는 것을 보았는데요 부끄러운 이야기이지만 프로그래밍 하면서 역인용부호라는 것을 처음 보는거라 생소해서 이렇게 정리해서 올립니다.

=========================================================================

역인용부호는 명령어치환(Command Substitution)이라는 것을 하기위해 쓰이는 연산자이다. 명령어 치환은 명령을 실행한 후에 나오는 결과를 다른 명령어의 인자로 쓸수 있도록 하는 것

  • 강좌사이트의 소스 부분 (왕초보를 위한 Python2.7 내용)
    et = os.path.getmtime(path) # path의 작성일시(epoch 형식)
    lt = time.localtime(et) # local 형식으로 변환
    
    yy = string.zfill(`lt[0] % 100`, 2) # 공백을 0으로 채워 두자리 수 만듦
    mm = string.zfill(`lt[1]`, 2) 
    dd = string.zfill(`lt[2]`, 2)
    mdate = yy + '-' + mm + '-' + dd

lt[0]의 내용(int)을 string 형으로 변환시켜 zfill()의 인수로 사용했다.

  • 도움말에서 zfill() 함수 설명 부분


string.zfill(s, width)

Pad a numeric string on the left with zero digits until the given width is reached. Strings starting with a sign are handled correctly.


  • 역인용부호 사용에 대한 예제 부분 (왕초보를 위한 Python2.7 내용)
>>> 1+2
3
>>> '1+2'    # 그냥 따옴표
'1+2'
>>> `1+2`    # 역 인용부호
'3'

첫번째 명령은 1+2의 결과값이 나오고 두번째는 "1+2"를 작은따옴표처리하여 문자열로 나타내었고 세번째는 1+2의 결과를 역인용부호로 처리하여 문자열로 나타내었다.

  • 참고 및 출처
왕초보를 위한 Python 2.7 : http://wikidocs.net/read/1608

2012년 8월 6일 월요일

풀업 저항과 풀다운 저항 (pull-up resist & pull-down resist)


주의사항 : 공부하면서 이해가 안 되었던 것들을 찾아서 올려둡니다 수작업이라 내용이 이상하거나 오탈자가 있을수 있으므로 댓글로 남겨주시면 바로바로 수정하겠습니다.

현재 이미지의 링크가 깨져있어 보이지 않고 있습니다. 조만간 수정해서 업로드 하겠습니다.

History...
2012. 8. 6. 네이버 블로그에서 이전

============================================================================================================

플로팅 상태

칩에 정보를 입력할 때 전압을 가하게 된다.( ex] 5V(high), 0V(low) ) 만약 입력 핀에 5V도 아니고 0V 도 아닌 전압이 걸리게 된다면 칩은 '1'인지 '0'인지 구별하지  못하게 되어 오작동이 일어난다.

< 2012.4.30 추가 >
핀에는 High, Low가 아닌 High-Impedance 상태가 되어 개방회로 처럼 작동하게 됩니다. 

* 개방회로 : 전류가 흐르지 않는 회로 
=> ( 전류 = 전하의 흐름, 저항 = 전하의 이동을 막는 정도, 
전류가 흐르지 않는다 -> 저항이 무한대이다 (High-Impedance) ) 

개방 : 회로가 서로 연결되어 있지 않다. (전하가 이동할 통로가 없는 상태)
단락 : 회로가 연결되어 있다. (전하가 이동할 통로가 있는 상태)

이러한 상태를 '플로팅(floating) 상태'라고 한다.
(a)에서는 스위치를 통해서 전압이 가해지고 있으므로 High 상태가 된다.
(b)에서는 전류가 그라운드로 흐르므로 전압이 낮아진다.
(c)에서는 그림(b)에서 스위치를 OFF한 상태. 전압의 상태를 알수 없다. (floating!!!)
<2012.3.13 오타수정>

입력 핀의 값을 High 나 Low로 정해높고 싶다면 어떻게 해야 하나?


풀업저항 (Pull-up)

아래 그림은 칩에서 A라는 핀에 저항과 5V의 전원을 붙인 상황이다.


그림(a)에서는 스위치가 off 상태여서 전류가 핀 A로 흘러가 5V의 전압이 가해진 상태가 되고
그림(b)어서는 스위치가 on 상태이므로 전류가 그라운드로 흘러서 전압이 0V가 된다.

=> A핀이 0V 일 때 '1'로 인식하고 5V 일때 '0'으로 인식하는 입력핀이라면 스위치를 열어 놓을 경우 '0'인 상태로 인식되고 반대로 스위치를 닫아 높을 경우는 '1'인 상태로 인식하게 된다.

핀의 전압을 High 상태로 유지하기 위해 붙이는 저항을 풀업저항이라고 한다.

풀다운 저항 (pull-down)

 저항이 A핀에 붙어있고 저항의 반대쪽은 그라운드에 연결되어 있는 그림이다.
회로에서 스위치가 열려 있는 그림(a)에서는 전류가 그라운드로 흐르게 되어있어서 핀의 전압이 0V가 된다. 그러나 그림(b)에서는 소량의 전류가 저항을 통해서 그라운드로 흘러 가지만 많은 양의 전류가 A핀으로 흘러가서 A핀의 전압이 5V가 된다.
=> A핀이 0V 일 때 '0'로 인식하고 5V 일때 '1'으로 인식하는 입력핀이라면 스위치를 열어 놓을 경우 '0'인 상태로 인식되고 반대로 스위치를 닫아 높을 경우는 '1'인 상태로 인식하게 된다.

핀의 전압을 Low상태로 유지하기 위해 붙이는 저항을 풀다운저항이라고 한다. 
 
[출처] 
뇌를 자극하는 하드웨어 입문, 한빛미디어 
디지털 논리회로, 한빛미디어
전기박사(cafe.naver.com/power119/181804)

비트 마스크(bit mask)

주의사항 : 수업 중에 배운 내용을 정리해서 올려둡니다 수작업이라 내용이 이상하거나 오탈자가 있을 수 있으므로 댓글로 남겨주시면 바로 수정하겠습니다.

현재 이미지의 링크가 깨져있어 보이지 않고 있습니다. 조만간 수정해서 업로드 하겠습니다.


History...

2012. 8. 6. 네이버 블로그에서 이전
=================================================================================

bit mask
마이크로프로세서 수업시간에 비트 마스크에 대해서 설명이 나와서 정리해 봅니다.
나름대로 bitmask가 무엇인지 정의를 내려보자면
>>특정 비트의 값을 바꾸기 위해서 하는 연산
음... 빈약하군요... 보시는 분이 있다면 댓글로 보충 부탁드립니다.
AND & OR 연산
AND(&) 연산은 두 비트가 모두 '1'일 경우 결과가 '1'이고  그렇지 않으면 결과가 '0'이 되는 연산.
OR (|) 연산은 두 비트중 하나만 '1'일 경우 결과가 '1'이고 그렇지 않으면 결과가 '0'이 되는 연산.
* 논리 연산자(&&, ||, !)와 비슷하지만 비트를 연산 대상으로 한다는 점이 다름



AND 연산 예시
OR 연산 예시

mask off
특정 비트를 강제로 '0'으로 만드는(또는 특정 비트를 원래 비트값을 그대로 유지하는) 연산.
AND 연산에서 '0'과 &연산하는 비트는 그 값에 상관없이 무조건 '0'이 되고 '1'과 &연산하는 비트는 원래 비트값을 그대로 유지하는 특성이 있다.
예)
비트열 A가 (0b01010101 = 0x55)라고 하고 상위 2비트와 하위 2비트(0b11000011)를 유지하고 다른 비트들은 다 '0'으로 바꾸고 싶은 경우.
비트열 A와 마스크를 AND 연산한 결과의 상위 2비트와 하위 2비트가 비트가 비트열 A의 그것과 같음을 볼수 있음.
mask on
특정 비트를 강제로 '1'로 만들고 나머지는 유지하는 연산
OR 연산에서 '0'과 연산하는 비트는 원래 값을 유지하고 '1'과 연산하는 비트는 무조건 1이 되는 특성이 있다.
예)
비트열 A가 (0b01010101 = 0x55)라고 하고 상위 2비트와 하위 2비트(0b11000011)를 '1'로 만들고 다른 비트들은 유지하고 싶은 경우. 
비트열 A와 마스크를 OR 연산한 결과의 상위 2비트와 하위 2비트의 비트가 '1'로 바뀌고 나머지 비트는 비트열 A와 같음.
배타적 논리합 (XOR(^):eXclusive OR)의 활용
^은 ~(NOT)연산자와 마찬가지로 비트를 반전시키는 기능을 하는데 ~연산자가 전체 비트를 반전시키는 반면에 ^은 지정한 비트만을 반전시킨다. ^연산은 비트가 서로 다를 때만 '1'이 되고 같으면 '0'이된다. 따라서 '1'과 ^연산하는 비트는 반전하고 '0'과 ^연산하는 비트는 원래 값을 유지한다.
<오타수정 12.3.13>
예)
비트열 A가 (0b01010101 = 0x55)라고 하고 상위 2비트와 하위 2비트(0b11000011)를 반전하고 다른 비트들은 유지하고 싶은 경우.
비트열 A와 마스크를 XOR 연산한 결과  상위 2비트와 하위 2비트의 비트가 반전되고 나머지 비트는 비트열 A와 같음.
활용(수업시간에 한 내용)
#include<avr/io.h>
#include<avr/interrupt.h>
...
TIMSK |= 1<< TOIE0;
TIFR |= 1 << TOV0; 
...
return 0;
}
타이머 예시코드에서  TIMSK(타이머 인터럽트 마스크 래지스터)의 첫 비트의 값을 '1' 넣으러고 하는 코드 설명 중 교수님이 아래 세줄의 차이점을 설명
TIMSK(타이머 인터럽트 마스크 래지스터)의 첫 비트(Timer/counter Overflow Interrupt Enable)가 '1'이 되면 overflow interrupt를 활성화한다. 
TIMSK = 0x01; ---------->(1)
TIMSK |= 0x01; --------->(2)
TIMSK |= 1 << TOIE0; ---->(3)
우선 (1)에서는 TIMSK에 0x01(=0b00000001)값을 넣는 코드인데 이렇게 넣으면 의도대로 첫 비트의 값이 '1'이 들어 가지만 나머지 비트의 값이 다 '0'으로 되어버리므로 에러의 소지가 있다.
(2)에서는 TIMSK와 0x01을 |연산하여 첫번째 비트만 mask on한다. 나머지 비트는 그대로 유지하고 첫번째 비트만 바뀌었다.


(3)을 보면
TIMSK |= 1 << TOIE0; //#define TOIE0 0 (기능에 매칭되는 비트열을 매크로상수로 정의했다.)
|= 연산자 보다 << 연산자가 우선순위가 높기 때문에 '1 << TOIE0 ' 이 먼저 실행한다.
(2)와 (3)은  결과에는 큰 차이가 없지만 (2)에서는 자신이 바꾸어야 할 비트의 위치와 그 비트를 바꾸었을때의 기능을 알아야 하는 반면에 (3)은 TOIE0(Timer/counter Overflow Interrupt Enable)이라는 기능만 알고 있으면 레지스터의 값을 편리하게 바꿀수 있는 장점이 있다.
[참고 및 출처] 마이크로프로세서및실습 수업, www.winapi.co.kr

2012년 8월 3일 금요일

[리뷰] Logitech h600 개봉기

짧은 이어폰 줄로 고생하던 참에 랩실의 옆 친구가 헤드셋을 샀더군요.
알바로 약간 여유가 생긴 통장 잔고와 지름신의 꼬임으로 난생 처음 블루투스 헤드셋을 구입했습니다. ㅎㅎ

제가 구입한 블루투스 헤드셋은 Logitech h600이란 제품이고요.
아래와 같은 특징을 가지고 있습니다.
  • 6시간 연속사용
  • 10m (33 feet) 정도의 수신범위
  • 마이크 및 접이식 구조
  • 볼륨 조절 버튼
현재 (2012, 8월 3일 기준) 네이버에서 6만원 후반대에서 10만원 초반대로 가격이 나와 있습니다. 

이제 슬슬 개봉해 보겠습니다.
더운 여름날씨에 고생하신 택베기사님께 감사드립니다. ^^*

PS.사진 실력이 초 뉴비급이라 보기 어려울 수 있습니다.

개봉전 이미지 샷

상자를 풀어보면 헤드셋과 블루투스 동글, 충전 잭, 사용설명서가 들어 있습니다.
당장 동글을 노트북의 USB에 연결한 후 헤드셋의 전원을 눌러 봤습니다.


소리가 안나네요...
영문으로 된 사용 설명서를 찾아 따라해보고 이것 저것 만져 봤지만 안돼더군요..ㄷㄷ

결국 Logitech의 고객지원 사이트(http://www.logitech.com/ko-kr/support)를 찾아 갔습니다. 제품을 찾아보니 페어링 소프트웨어가 있더군요...

Pairing...?! 블루투스 제품이니까 페어링을 해야 되었던 것입니다. 
계속 삽질만 했군요...

일단 페어링 소프트웨어를 다운로드 받아 압축을 풀었습니다. 압축을 푼 폴더 안에 Pairing 이라는 파일을 더블클릭하면 페더링이 시작됩니다.

제품명을 선택 후 다음으로 계속 진행하면 볼륨 업키와 마이크 음소거 키를 누르라고 나옵니다. 하단의 그림속에 빨간 상자로 표시된 부분들 같이 누르고 있으면 됩니다.





페어링을 마치니 잘 작동하는군요 ㅎㅎ

음질은 막귀라 객관적으로 평가하기가 어렵지만 주관적으로는 아주 괜찮습니다. 귀를 완전히 덮기 때문에 조금 답답한 감이 있기는 하지만 금방 익숙해지는 군요.

ps. 객관적인 평가 방법을 아시는 분 있으면 댓글로 남겨주시면 테스트 해보겠습니다.

제품설명에서 수신 반경이 10m 이지만 트인 공간을 기준으로 했는지 쓰고 방을 나가면 수신이 잘 안되는군요. 마이크 음소거 버튼을 누르면 약간의 비프음을 내면서 상태가 전환됩니다. 녹음도 물론 잘 되고요.

난생 처음 구매한 블루투스 장비라 시행착오도 많았지만 잘 구입했다는 생각이 듭니다.
무선이라는게 참 편리하군요 ㅎㅎ
블루투스 헤드셋 중 적당한 가격과 로지텍이라는 브랜드를 고려한다면 다른 분들에게 추천해도 좋을 만 하다고 생각합니다.




2012년 7월 31일 화요일

블로그를 이전했습니다.

블로그를 이전했습니다.

잠시 접어두었던 블로깅 활동을 슬슬 시작하려고 합니다.
기본적으로 학교 수업내용, 프리젠테이션 관련 자료, Android, Python 에 대해서 글을 올릴 생각입니다.
기존의 네이버 블로그의 자료들은 천천히 옴겨올 거구요. 처음이라 많이 이쁘지도 않고 내용도 빈약하지만 천천히 채워나갈 생각입니다.