Blog/2015-02

Submitted by hyacinth @
파이썬으로 백엔드를 만드는 중에 cmd 파라미터로 숫자를 받는 부분이 있었는데 유효한 값 체크를 위한 str.isnumeric() 부분에서 음수가 들어올 때 통과를 못했다. 하도 어이가 없어서 여기에 대해 IRC에 말해봤다.

[16:15] <jaeholee_> ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
[16:17] <hyacinth^talk> 음수 붙은 건 숫자 아닌가요?
[16:17] <hyacinth^talk> print (u"-5").isnumeric() 하니까
[16:17] <hyacinth^talk> False 내뱉는 거 보니까
[16:17] <hyacinth^talk> 헐.. .
[16:18] <ditto> isnumeric 자체가 원래 한 글자에만 먹는거 아닌가요
[16:19] <ditto> Return True if there are only numeric characters in S
[16:21] <hyacinth^talk> 5.5 같은 것도 False 떨어지는 거 보니까
[16:21] <hyacinth^talk> 문자열 처음부터 끝까지 읽어서 0~9 아니면
[16:22] <hyacinth^talk> False인가보네요
[16:22] <hyacinth^talk> 진짜 숫자 판단하는 건 직접 만들라 이건가
[16:22] <hyacinth^talk> ...
[16:22] <lifthrasiir> float을 통과하면 되죠 뭐
[16:23] <lifthrasiir> 어차피 1e30000 같은 걸 받고 싶은 건 아니잖아요?
[16:23] <hyacinth^talk> 아 그래도 되겠구나
[16:23] <ditto> 그리고 isnumeric은 문제가 Ⅲ 같은 것도
[16:23] <ditto> True로 떨어져요
[16:23] <ditto> ㅋㅋㅋ
[16:24] <kkung> NUMERIC
[16:24] <hyacinth^talk> ditto//... 진짜네요
[16:24] <ditto> ¾
[16:24] <Yurumechan> 애초에
[16:24] <ditto> 이것도 True ㅋㅋㅋ
[16:24] <Yurumechan> 유니코드 문자 체크라서
[16:24] <ditto> 넹
[16:24] <Yurumechan> 별 이상한게 다 잡힘
[16:24] <kkung> 一 이것도
[16:25] <kkung> true인가요 그럼
[16:25] <Yurumechan> isdecimal인가도 마찬가지
[16:25] <changwoo> 네[ 한글도 isalpha() True
[16:25] <Yurumechan> isdecimal은
[16:25] <Yurumechan> 아 isdigit에 합쳐져 있나
[16:25] <Yurumechan> 여튼 아랍 문자가 잡힌다거나...
[16:25] <kkung> >>> u'一'.isnumeric()
[16:25] <kkung> True
[16:25] <kkung> 과연
[16:25] <hyacinth^talk> 무섭다
[16:25] <hyacinth^talk> 호러
[16:25] <ditto> ㄲㄲ
[16:25] <kkung> >>> u'일'.isnumeric()
[16:25] <kkung> False
[16:25] <kkung> 차별하네
[16:25] <kkung> (?)
[16:25] <ditto> work
[16:26] <Yurumechan> 뜻문자의 장... 아니 단점
[16:32] <changwoo> >>> u'𐅉'.isnumeric()
[16:32] <changwoo> True
[16:32] <changwoo> 꼼꼼하네요
[16:33] <ditto> 저게 무슨 글자죠? ㅠㅠ
[16:33] <ditto> greek acrophonic attic ten talents
[16:33] <changwoo> 고대그리스숫자..라네요
[17:23] <jeyraof^> 쩐다
[17:23] <jeyraof^> isnumeric()
[17:24] <kkung> '一' 집어 넣으면 1 나오는 라이브러리 같은거 만들면 재밌을꺼 같군요
[17:25] <kkung> '一 + 2' 같은걸 만들 수 있을텐데
[17:25] <kkung> 근데 순전히 다 노가다 해야하는건가
[17:25] <kkung> unicode db에 저런건 없나
[17:25] <ditto> 제가 알기론 있는데
[17:25] <kkung> http://www.charbase.com/3192-unicode-ideographic-annotation-one-mark
[17:25] <kkung> 그러게요
[17:26] <kkung> 'numeric value'
[17:26] <ditto> >>> unicodedata.numeric(u'一')
[17:26] <ditto> 1.0
[17:26] <ditto> ㅋㅋㅋㅋ
[17:32] <토성구름> https://github.com/karipe/plusplus/blob/master/plusplus.py 이런 쓸데없는 거 만들다가 귀찮아서 버린 적이...


The following methods are present only on unicode objects:
 
unicode.isnumeric()
 
Return True if there are only numeric characters in S, False otherwise. Numeric characters include digit characters, and all characters that have the Unicode numeric value property, e.g. U+2155, VULGAR FRACTION ONE FIFTH.
Python documentation
 

멍... 아, '숫자 문자'를 판단하는 거구나

파이썬 isnumeric()은 문자열이 유니코드 상에서 숫자 문자(u'四', u'¾' 분수, u'𐅉' 고대 그리스 숫자 (...) 등)로만 이루어져 있는지 판단하는 것이었는데 내가 의미를 잘못 생각했다. 쓸모있는 기능이긴 하지만 내가 필요했던 건 아니었다. 음수까지 대응할 수 있는 대안을 찾아봤는데 형 변환 할 때 예외처리를 사용하는 방법이 나아 보인다.
http://stackoverflow.com/questions/736043/checking-if-a-string-can-be-converted-to-float-in-python


결과 목록



Submitted by hyacinth @
150215_1.jpg
[JPG image (264.97 KB)]


일요일에 신도림 디큐브시티 들렀는데 지하 1층에 핫트랙스가 개점해 있었다. 지난 달부터 공사중이었는데 규모가 꽤 큰 편이었다. 헤드폰, 이어폰이 청음 가능한 상태로 의외로 많이 준비되어 있었다. 최근 출시되어서 못 들어본 헤드폰들도 있어서 헤드폰 위주로 들어봤다. 의도치 않은 청음기가 되어버렸다...

150215_2.jpg
[JPG image (268.65 KB)]


아래는 간단한 들어본 후기.

오르바나 라이브2 - 착용감은 편한 편. 영혼없는 소리. 다르게 말하면 조금 심심한 소리. 평이 좋았던 걸로 기억하는데 약간 실망했다. 가성비가 좋다는 의미였는 듯.
오르바나 골드 - 머리에 너무 끼어서 착용감이 아주 불편하다. 저역 소리가 너무 울린다.


150215_3.jpg
[JPG image (287.7 KB)]


젠하이저 Urbanite - 박력있는 소리인데 조금 부담스럽다.
젠하이저 Momentum - 균형있는 소리에 해상력 뛰어나다. 소리 좋다. 그런데 좌우 소리 균형이 안 맞았다. 전시된 물건이라 단선될 수는 있는 일이지만 조금 더 생각하면 전시 중 단선된 헤드폰이 있다면 그건 내구성이 부족하다는 얘기가 아닐까? 다른 헤드폰들도 손을 안 타는 건 아닐테니까. 외관 디자인 멋지다.
젠하이저 Momentum OE - 해상력은 괜찮은데 베이스가 약간 강조됨. 부담되는 정도는 아님. 나쁘지 않다.
젠하이저 PX88 - 무게가 대단히 가볍다. 소리도 가볍다. 헤드폰보다는 이어폰 소리 같다.

150215_4.jpg
[JPG image (276.03 KB)]


소니 S70AP - 해상력 떨어짐. 그저 8만 원대 아웃도어 헤드폰 소리.
소니 MDR-1 - 무게가 가볍고 헤드 움직임이 자유로워서 편하다. 크기에 비해 아웃도어에도 부담없는 디자인. 소리는 보통 수준, 나쁜 편은 아님. 그런데 재미없는 소리.

DEADMAU5 - 닥터 드레 헤드폰이 떠오르는 뭔가 OEM스러운 브랜드. 소리는 값싼 패션 헤드폰 급. 기억에 남지도 않는다.
슈어 SRH145 - 슈어에서 나온 아웃도어 헤드폰. 소리는 가격대 수준.
보스 사운드링크 OE - 전형적인 보스 소리. 30만 원대 보스 스피커에서 나는 소리하고 대단히 비슷하다. 만듦새가 디테일한 부분까지 마감이 상당히 좋다. 전원 들어가고 볼륨 조절 버튼도 있는 걸 보니 블루투스도 되는 듯.
오디오 테크니카 ATH-MSR7 - 오테가 소니와 하이 레졸루션 오디오 제휴 맺고 만든 게 이 헤드폰이다. 저역이 부족한 듯. 그렇다고 고음이 쏘는 것도 아니고. 전체적으로 어딘가 부족한 소리. 한마디로 일반적인 오테보다는 소니 소리다. 내 취향은 아님.

오늘 들어본 헤드폰 중 들을만 했던 건 젠하이저 모멘텀 밖에 없었다.


전문 청음샵처럼 100만 원 넘는 고가 헤드폰은 하나도 없고 모두 중저가 헤드폰이긴 하지만 신도림 인근 살고 있다면 청음샵 대신 한 번 방문해도 괜찮을 듯 하다.

2016.10.01. 추가 ─ 결국 이 날 경험으로 나중에 보스 사운드링크 AE2를 구매했다. 보스 소리를 워낙 좋아해서...



Submitted by hyacinth @
윈도우 배경화면을 한동안 같은 그림으로 쓰고 있었는데 문득 지겨워져서 그림 폴더에서 30초 간격으로 랜덤으로 바뀌게 설정해놓았다. 그러다보니 설정된 배경화면의 원본 이미지를 보고 싶을 때가 있었는데 그림 폴더에 그림이 수천 장 있었기 때문에 원본을 찾기 힘들었다.


그렇다...

난 이런 그림이나,

150216_2.jpg
[JPG image (264.71 KB)]


이런 그림이,

150216_3.jpg
[JPG image (272.8 KB)]


배경화면이 되었을 때 (분명 내가 저장해둔 사진이긴 하겠지만) 전체 그림이 어떻게 생겼는지 신경쓰여 참을 수가 없었던 것이다.

그래서 원본 이미지를 바로 찾을 수 있는 스크립트를 만들었다.

윈도우 배경화면의 위치는 레지스트리 HKCU\Software\Microsoft\Internet Explorer\Desktop\General\WallpaperSource에 그림 파일 경로가 저장되어있다. 아래는 이 값을 VBS로 읽어 그림 파일과 탐색기 상 위치를 열어주는 스크립트다. PROFIT!

@wallpaper.vbs (462 Bytes)




Submitted by hyacinth @
다음은 C#에서 비동기로 HTTP 요청를 보내는 코드의 일부다. 머리 노란 애들이 작성한 코드를 볼 때 유니코드 인코딩 부분은 가장 찾기 흔한 실수 중 하나다.


이 코드는 UTF-8 인코딩으로 2바이트 이상 되는 문자를 전송하려고 하면 프로그램이 죽는다. 영어로만 전송을 하면 이상을 알아차리기 힘든 코드다. 이렇게 수정되어야 한다.

postStream.Write(byteArray, 0, postData.Length);,#color:#990000#

postStream.Write(byteArray, 0, byteArray.Length);,#color:#38761D#

UTF-8에서 영어 알파벳은 1바이트기 때문에 postData.Length도 문제가 없었겠지만 바이트 스트림이라면 문자열 길이보다 길어질 수 있기 때문에 바이트 길이로 보내야 한다. 기껏 문자열에서 유니코드 바이트로 바꿔놓고 프로래머가 쓰다가 졸았나보다.



Submitted by hyacinth @
조금 늦었지만 올해도 한 해의 개인적인 주제를 골라본다. 작년은 "100% 알지 못하는 건 전혀 모르는 것과 같다."였다(링크: 신년을 맞아). 올해도 비슷한 맥락이지만 조금 더 구체적인 말을 골라봤다.

"설명하거나 글자로 남기지 못한다면, 당신은 그것에 대해서 잘 알고 있지 못한 것이다."

어떤 지식을 남에게 쉽게 설명하기 위해선 글이나 말로 풀어쓰는 분량의 10배 정도는 자세히 알고 있어야 한다고 말한다. 나도 경험적으로 그렇게 느끼기도 한다. 설명하기 어렵다는 말은 그만큼 그 일에 대해서 잘 모르기 때문에 정리하기 어렵다는 말과 같다.

결국 어떤 도메인이든 지식은 깊게 알고 있어야 한다는 점에서 작년에 고른 주제와 비슷하다. 차이가 있다면 작년은 '알아야 한다'에서 그쳤지만 올해는 '알고나서 설명한다'까지 나아갔다는 점이다.