'killing time'에 해당되는 글 4건

  1. 2013.02.18 [Leap Motion] 새 장난감 드디어 내 품에
  2. 2013.02.07 [Javascript] Drag, Select & Copy 방지와 해법
  3. 2012.02.23 [Python] 특정 폴더들을 찾아 삭제하기
  4. 2011.12.30 [Python] 텍스트 파일 인코딩 변경

[Leap Motion] 새 장난감 드디어 내 품에

오늘 점심에 드디어 Fedex를 통해 아기다리고기다리던 Leap Motion을 받았습니다. 작년 여름에도 개발 버전 샘플 신청을 했었는데 떨어졌드랬죠. "삼성에서 스마트TV 개발하다가 지금은 스타트업 하는 개발자 나부랭인데 이런저런거 너네꺼로 만들어 보고 싶다."라고 했는데 무참히 씹혔습니다. 이번에는 "LG전자 Convergence 연구소의 연구원인데, 개인적으로 어디 쓸데가 있는지 생각해 볼테니 함 보내줘"라고 했는데 공짜로 하나 보내주네요. 역시 글로벌 대기업이 좋쿠나 생각합니다.

    겉모습은 애플 아이폰이 생각나게 초 심플합니다. 홈페이지에서 4개의 예제 프로그램을 다운로드 받을 수 있습니다. 모션의 정확성은 예제라서 그런지 생각보다 좋지 않습니다. 디바이스의 문제라기 보다는 사용자에 맞게 후처리가 많이 필요한 것으로 생각 되는데요. 몇 가지 디지털 필터만 잘 적용해도 응답성이나 정확성이 매우 향상될 것으로 생각됩니다.

    SDK의 API는 초 간단해서 Listener를 등록하면 모션을 감지해서 계속 이벤트가 날아옵니다. 이벤트가 넘겨주는 가장 큰 단위를 프레임(Frame)이라고 하는데, 시간 값과 함께 날아 옵니다.  프레임에는 손들(Hands)이 들어 있고, 하나의 손(Hand)에는 손가락들(Fingers)가 있습니다. 손가락(Finger)는 마지막으로 벡터(Vector) 값을 갖습니다. 참 쉽죠잉~? 아마 끝이 존재하는 막대들을 파악하여 손가락과 손을 구분하는 것 같습니다.

    동작 중 디바이스에서는 약간의 열이 발생하지만, 뜨겁거나 하지는 않습니다. 약간 뜨뜻미지근한 정도 될까요? 손에 꽉 쥐어도 괜찮습니다.

    홈페이지에서 $69.99에 판매하고 있으니 관심 있으신 분들은 구매해 보는 것도 나쁘지 않을 듯 합니다. 한가지 흠이라면 현재 윈도우와 맥만 지원하고 리눅스는 지원하지 않는다는 것? 그나저나 이것저것 테스트 해보고 싶은데, 3D 그래픽을 몰라서 뭘 어찌할지 고민이 ㅠㅠ

    아래는 개봉 사진입니다. 구경들 하세요.


포장 박스: 개발 보드라고 적혀 있습니다.


개봉: 디바이스와 USB 케이블, 영문으로 된 편지가 동봉되어 있습니다.


상단 및 정면 사진: 지문이 잘 뭍습니다 ㅠㅠ 정면의 금딱지는 회사 보안 스티커 입니다. LG라고 적혀 있고, 저게 있어야 마음대로 가지고 들어갔다 나왔다 할 수 있습니다.


하단 및 후면 사진: 시리얼 넘버 따위는 없습니다. 미끄럼 방지를 위해서인지 실리콘 재질 입니다. 제품 이름과 미국 산 디자인, 중국에서 제조라고 되어 있습니다.


동작: 케이블을 연결하면 정면에 녹색 LED가 들어오며, 홈페이지에서 구동 프로그램을 설치하면 상단에 중앙, 좌, 우 3개의 붉은 LED가 켜집니다.



[Javascript] Drag, Select & Copy 방지와 해법

웹은 모든 사람들과의 정보 공유를 위해 존재합니다.

그런데 언제부터인가 불펌이 횡행하면서 

자신들의 컨텐츠에 복사 방지 코드를 삽입하는 사람들이 늘어나고 있습니다.


물론 남의 컨텐츠를 함부로 도용하는 것은 문제가 있지만,

이런 방지장치가 정말 짜증이 나는 경우가 있습니다.

그것은 바로 소스코드를 복사해야 할 때입니다.


시스템 설정이나 스크립트 코드, 프로그램 소스코드 등

직접 보고 치기에는 실수할 확률도 높고 그 양이 많은 경우에

복사해서 바로 실행하거나 컴파일하면 더 편한 것은 두말하면 입이 아픕니다.

그게 아니라면, 별도의 완성된 파일을 다운로드 받도록 제공하는 것도 한 방법이죠.

그러나 대부분 그렇지 않습니다.


일반적으로 소스코드 복사 방지는 다음과 같은 자바스크립트로 동작합니다.

// contextmenu(마우스 우측키)를 방지합니다.
document.oncontextmenu = function { return false; }
// 선택을 방지합니다.
document.onselectstart = function { return false; }
// 드래그를 방지합니다.
document.ondragstart = function { return false; }

그렇다면 이를 무력화 시키려면 정확히 반대로 해주면 됩니다.

document.oncontextmenu = null;
document.onselectstart = null;
document.ondragstart = null;

요즘 브라우저에는 대부분 디버그툴(or 개발자도구)이 있고,

그 안에는 자바스크립트 콘솔 역시 포함되어 있습니다.

자바스크립트 콘솔을 열어 위의 세 줄을 차례로 실행시키면 

대부분의 경우 선택 및 복사가 가능해 집니다.

[Python] 특정 폴더들을 찾아 삭제하기


배경:
현재 주요 프로젝트 환경의 구성에 있어서 개발 서버에는 SVN을 두고, 로컬은 Mac OS X에서 git으로 소스코드를 관리하고 있다. 다만, 웹 디자이너와의 협업은 FTP를 통해 이루어지는데, 이번에 여러 사정으로 .svn 파일들이 로컬 작업 공간에 모두 복사되었다. 
수 많은 폴더들을 하나씩 열어가며 삭제하는 것은 정신나간 짓이기에 재귀적으로 .svn 폴더를 찾아 삭제하는 스크립트를 짜기로 했다. Mac OS는 유닉스 계열 커널이므로 굳이 Python을 사용하지 않고 쉘스크립트를 이용해도 되지만, 본인은 쉡스크립트 프로그래밍을 현재 모르는 상태이기에 Python을 이용하였다.

환경:
Mac OS X Lion
Python 2.6

해법:
현재 디렉토리를 기준으로 재귀적으로 .svn 폴더를 찾아 모두 삭제한다.

코드:

import os


def remove_all(root):

for base, dirs, files in os.walk(root, topdown=True):

for name in files:

next = os.path.join(base, name)

print 'F: ' + next

os.remove(next)

for name in dirs:

next = os.path.join(base, name)

print 'D: ' + next

remove_all(next)

os.rmdir(next)


def remove_svn(root):

for base, dirs, files in os.walk(root, topdown=True):

for name in dirs:

next = os.path.join(base, name)

if name == '.svn':

print 'D: ' + next

remove_all(next)

os.rmdir(next)

else:

remove_svn(next)


remove_svn(os.path.abspath(os.path.dirname(__file__)))

 
위 코드를 remove_svn.py라는 파일로 저장하여 커맨드라인에서 동작시켰으며, 문제없이 잘 동작하였다.
 

[Python] 텍스트 파일 인코딩 변경


배경:
몇달 전 64비트 윈도우의 필요로 Windows 7 Ultimate 영문판을 설치했다. 한글 사용을 위해서는 한글팩을 설치하고 언어환경을 변경해 주어야 하지만, 귀찮았다. -_-;;; 몇몇 국내 프로그램들의 미개한 언어셋 문제로 불편을 겪긴 하지만, 중요한 문제는 아니었기에 그냥 넘어갔으나 미드 자막을 보는데 있어 곤경에 처하게 되었다. 윈도우의 기본 한글 언어셋(cp949)에서 만들어진 자막이 영문 윈도우에서 똑바로 보이지 않는 문제가 있는 것이다. 테스트 결과 자막을 UTF-8로 변경하면 문제가 없었다. 그러나 그 많은 자막을 손수 인코딩 하는 것은 맨정신에는 곤란한 일이라고 생각된다.

환경:
Windows 7 Ultimate - ENG
Python 2.7

해법:
python을 이용하여 자막 파일을 찾아 인코딩하는 스크립트를 작성하기로 하였다.

전제:
소유하고 있는 모든 한글 자막은 cp949로 인코딩 되어있다.

코드:

# -*- coding: utf-8 -*-


import os

import os.path


rootpath = os.path.dirname( os.path.abspath( __file__ ) )


for basepath, dirs, files in os.walk(rootpath):

for filename in files:

if filename.endswith('.smi') or filename.endswith('.srt'):

filepath = os.path.join(basepath, filename)

f = file(filepath, 'r')

s = f.read()

f.close()


import shutil

shutil.copyfile(filepath, filepath + '.bak')


f = file(filepath, 'w')

f.write(unicode(s, 'cp949', 'ignore').encode('utf-8'))

f.close()



위 코드를 utf8script.py라는 파일명으로 저장한 후 커맨드라인에서 실행 시켰다.
시험적으로 적용해 본 폴더에서는 만족스럽게 동작 하였으며,
현재 결과물과 함께 미드를 감상 중이다.