windows python pip 실행시 아래같은 UnicodeDecodeError가 난다면 


UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 7: ordinal not in range(128)


아래 내용으로 파일을 만들어 넣어 주세요.


C:\Python27\Lib\site-packages\sitecustomize.py

# encoding=euc-kr
import sys

reload(sys)
sys.setdefaultencoding('euc-kr')


한글 윈도는 아직 euc-kr 이 기본이여서..... 사용자명이 한글이면 홈폴더 경로 때문에 문제가 되는 듯..

출처 : http://blog.daum.net/bluebread/2


분명히 이걸 아는 사람이 있을텐데 올려놓은 사람은 없군요.



설정방법
 
1. DoNoting() 이라는 macro를 만들어 추가한다. 진짜로 아무일도 하지 않는 걸로.
macro DoNothing()
{
}
2. Option > Key Assignment 을 선택한다.
 

 


 
3. Macro: DoNothing 선택후에 Assign New Key를 누르고 다음의 키조합을 입력한다.
Shift + 한/영 (황당한 조합이지만 먹힌다.)
4. 화면에 "shift+ " 로 표시되면 들어간 것이다.
 
5. 완료!!

이후로 아무 것도 해줄 필요가 없다. 

그냥 메모장 쓰듯이 한글입력하면 된다. 쌍자음 그냥 입력해도 안 깨진다.

 
 
주의
"어 안되잖아?" 하시는 분이 있을까봐...
 
txt 파일에서 시험해보면 확실히 아무런 문제가 없는데, c 파일에서는 커멘트나 따옴표 블럭 밖에서는 한글이 깨진것처럼 보일 것이다.
정확한 이유는 알수 없지만 깨진게 아니고 잘못 보여주는 것이다. (syntax highlight 때문이라고 생각한다.)


아래 그림에서 보듯이, 마우스로 블럭선택해보면 멀쩡한 글자들이 보인다.

그리고 커멘트내에서는 안 깨져 보인다.

 c 파일에서 커멘트나 따옴표 외부에 한글쓸 일은 어차피 없으니 안심하자.

 


 
배경지식
 
Source Insight 로 한글입력시 shift 때문에 깨진 파일을 헥사 에디터로 보면 0xe5가 들어가면서 한글이 깨진다는 것을 알 수 있다.
그런데 0xe5가 뭐냐하면...
 
VK_PROCESSKEY (0xE5)
Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
 
그니까 소스인사이트는 IME에서 내려오는 virtual key code중에서 ctrl 이나 alt 같은 실제로 문자입력이 아닌 값을 유효한 문자인 줄 알고 처리하고 있는 것이다.
 

그래서 이걸 가로챌 방법을 생각하다가 macro hot key로 assign 해보니까.. 통했다.


be happy!!


출처 : http://blog.daum.net/bluebread/15



안드로이드에서 git을 사용하는데 적응이 안되는 부분이 변경사항을 보는 것입니다.

(물론 gerrit을 사용하는 환경이라면 또다른 이야기입니다.)


araxis merge 나 beyond compare 와 같은 디렉토리 비교툴에 익숙하시다면, git diff의 결과물이 낮설겁니다.


git diff 의 표시형식은 다음과 같이 - + 로 추가 삭제된 내용을 표시합니다.


이런 diff 형식이 낮선 분들은 git difftool을 사용하여 다음과 같은 좌우로 비교창을 열어 볼 수도 있습니다. (vimdiff를 사용한 예)



위에서는 vimdiff를 사용하였지만, git difftool은 실행할 파일을 지정할 수가 있습니다.

이 기능을 이용하여 (git difftool의 help를 보십시오.) diffzip.sh 라는 스크립트를 만들었습니다.

변경 이전과 이후의 바뀐 파일들만을 diff_old/diff_new 디렉토리로 정리해 zip을 해주는 유틸리티입니다.


일단 소스를 보시면 다음과 같습니다.

diffzip.sh

#!/bin/bash
if [ -f diff.zip ]
then
rm diff.zip
fi
git difftool -y -x '~/oldnew.sh' $@
zip -r diff.zip diff_new diff_old
rm -rf diff_new
rm -rf diff_old

oldnew.sh

#!/bin/bash

function bury_copy()
{
mkdir -p `dirname $2` && cp "$1" "$2";
}

$(bury_copy $1 diff_old/$BASE)
$(bury_copy $2 diff_new/$BASE)


diffzip.sh 의 사용법은 다음과 같습니다.

0. 전제조건

- git version이 1.7.4 이상이라야 합니다. (git difftool이 $BASE 변수를 제대로 설정하여야 하기 때문에 필요합니다.)

- zip 이 설치되어 있어야 합니다. 저는 다음 버전을 사용했습니다. Zip 3.0 (July 5th 2008), by Info-ZIP.


1. diffzip.sh 와 oldnew.sh를 ~/ 디렉토리에 만듭니다.

2. 두 스크립트를 실행가능하게 만듭니다.
chmod +x diffzip.sh
chmod +x oldnew.sh

3. git 디렉토리에서 ~/diffzip.sh 를 실행하면 diff.zip 파일이 생깁니다.

실행화면은 다음과 같습니다.


이 zip 파일에는 diff_old/ 와 diff_new/ 라는 디렉토리가 들어있고 변경파일들만 포함되어 있습니다


4. 이 diff.zip 파일을 풀어보면 다음과 같이 변경사항들이 들어있게 됩니다.


내가 변경한 내용을 다른 사람에게 보여줄 때 매우 유용합니다.

즉. 코드 리뷰시에 쓸모가 있지요.

32bit framebuffer를 png로 바꾸는 perl script

ex) cat /dev/graphics/fb0 > /sdcard/fb0.dat

./fb2png 768 1024  < fb0 > screen3.png

#!/usr/bin/perl -w

 $w = shift || 240; 

 $h = shift || 320; 

 $pixels = $w * $h; 

 open OUT, "|pnmtopng" or die "Can't pipe pnmtopng: $!\n"; 

 printf OUT "P6%d %d\n255\n", $w, $h; 

 while ((read STDIN, $raw, 4) and $pixels--) { 

   $long = unpack('L', $raw); 

   print OUT pack("C3",

    ($long & 0x000000ff),

    ($long & 0x0000ff00) >> 8,

    ($long & 0x00ff0000) >> 16,

    ); 

 } 

 

 close OUT; 



$ ioctl -h 
ioctl -h 
ioctl [-l <length>] [-a <argsize>] [-rdh] <device> <ioctlnr> 
  -l <lenght>   Length of io buffer 
  -a <argsize>  Size of each argument (1-8) 
  -r            Open device in read only mode 
  -d            Direct argument (no iobuffer) 
  -h            Print help 


I tried on Tiny6410. Using ioctl one can turn on and off the leds


To turn on led3 
# ioctl  -d  /dev/leds 1 3
sending ioctl 0x1 0x03 0x00 0x00 0x00
return buf: 03 00 00 00

To tun off led3
 # ioctl  -d  /dev/leds 0 3
sending ioctl 0x0 0x03 0x00 0x00 0x00
return buf: 03 00 00 00

Hope this helps.

로그 보는데 이만한게 없다.

커널로그도 되고 ini 파일을 편집해서 자기가 원하는데로 커맨드를 추가 할수도 있다.

하기 주소에서 받으면 된다.

http://blog.naver.com/iookill/140135139931


하기는 내가 쓰는 LogFilterCmd.ini 내용

CMD_COUNT=10

CMD_0=shell cat /proc/kmsg

CMD_1=logcat -v time -b main

CMD_2=logcat -v time -b radio

CMD_3=logcat -v time -b events

CMD_4=logcat -v time -b system

CMD_5=logcat -v time -b main -b radio -b system -b events

CMD_6=logcat -v time -b main -b system

CMD_7=logcat -v time -b main -b radio

CMD_8=logcat -v threadtime

CMD_9=root


기본적으로 리커버리 종료시 "/cache/recovery/log" 에 저장된다.

만약 recovery 디버그 메세지를 커널 메세지로 실시간으로 보고 싶을때 하기처럼 바꿔주면 된다.

static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log"; 를

static const char *TEMPORARY_LOG_FILE = "/dev/kmsg"; 로



Tip) user 영역에서 커널 메세지를 찍고 싶을땐 /dev/kmsg에 써주면 된다.

출처 :  http://foris.tistory.com/110



Android 소스를 mirror 해서 사용할때 manifest 파일을 수정해야 한다.


manifest 파일은 repo init 명령어에서 -m XXX_manifest.xml 의 옵션으로 지정할 수 있다.

특별히 지정하지 않는다면 default.xml 을 참조하게 된다.

현재 어느 파일을 참조하고 있는지를 보려면


$ cd .repo

$ ls -al


하면 


lrwxrwxrwx  1 jason jason    21 2012-11-16 14:58 manifest.xml -> manifests/default.xml


이렇게 soft link 로 어느파일인지 표시되어 있다.


manifest 파일의 내용에 대해 알아보자.


<?xml version="1.0" encoding="UTF-8"?>

<manifest>

  <remote fetch="ssh://git-repo@ServerIP/mirror" name="somename" review="reviewserverIP"/>

  <default remote="somename" revision="revisionName"/>

  <project name="a/aosp/platform/external/alsa-lib" path="external/alsa-lib"/>

  <project name="a/aosp/platform/external/alsa-utils" path="external/alsa-utils"/>

  <project name="a/aosp/platform/external/crda" path="external/crda"/>


위와 같은 manifest 파일이 있다고 하자.


<remote fetch="ssh://git-repo@ServerIP/mirror" name="somename" review="reviewserverIP"/>

어느 서버에서 git repository 를 받아올 것인가를 지정하는 곳이다. 그리고 somename 을 지정하면 아래의 project 에서 remote="somename" 항목을 참조하여 해당 git repository 를 ServerIP 에서 다운 받도록 한다.

revisionName 은 branch name 이라고 이해하면 될것 같다. 다운받은 후 해당 branch 의 최신 소스로 HEAD 를 옮겨 놓는다.


<project name="a/aosp/platform/external/alsa-lib" path="external/alsa-lib"/>

project a/aosp/platform/external/alsa-lib 의 mirror repository 는 external/alsa-lib 에 다운 받는다는 얘기다.


이 항목이 아래와 같이 표시 되는 경우도 있다.

<project name="a/aosp/platform/external/alsa-lib" path="external/alsa-lib" revision="5225266cc................d60"/>


이 경우는 git 의 특정 revision의 commit 으로 다운을 받고 HEAD를 옮긴다는 얘기다.

결론은 repo init 시 지정하는 manifest 파일에 따라서 repo sync 하고 난 후의 소스가 달라진다는 것이다.


manifest 파일의 설정을 잘 하면 repo sync 후 repo forall -c git checkout 같은 명령어를 쓰지 않아도 원하는 작업 branch 로 이동이 가능하다.


이상 끝.