우분투 LiveCD로 grub 복구하기

매번 할 때마다 그냥 그때그때 찾아서 했는데, 이제 찾는 것도 귀찮다…..

1. Live CD로 부팅한 후 https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fhowtoubuntu.org%2Fhow-to-repair-restore-reinstall-grub-2-with-a-ubuntu-live-cd&ei=tC1nVYDRKoalmQWr64LwAw&usg=AFQjCNEezfvAX1O1qULcr-1Cptqi-ps7Iw&sig2=lVwEJ0u7IuDDgGZfJnzjwQ&bvm=bv.93990622,d.dGY 의 내용대로 함.


요약하면, sudo gparted 하여 우분투 설치 파티션 알아냄. 거의 ext4 파티션. 나의 경우 /dev/sda4

sudo mount /dev/sda4 /mnt

sudo mount –bind /dev /mnt/dev &&

sudo mount –bind /dev/pts /mnt/dev/pts &&

sudo mount –bind /proc /mnt/proc &&

sudo mount –bind /sys /mnt/sys

sudo chroot /mnt

grub-install /dev/sda

grub-install –recheck /dev/sda

update-grub

exit &&

sudo umount /mnt/sys &&

sudo umount /mnt/proc &&

sudo umount /mnt/dev/pts &&

sudo umount /mnt/dev &&

sudo umount /mnt

2. Default 설정 등 파일은 /etc/default/grub 에 있음. 설정 바꾼 후 update-grub 하면 그대로 설정됨.

GRUB_DEFAULT=0

#GRUB_HIDDEN_TIMEOUT=0

GRUB_HIDDEN_TIMEOUT_QUIET=true

GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”

GRUB_CMDLINE_LINUX=””

집 수리를 위한 할 일 목록 2차 정리의 군 정렬

2차 목록을 기준으로 페인트 칠을 위해 할 일을 군으로 정렬한다.

현관: 벽면 칠하기 전 걸레받이 커버링 테이프

현관: 신발장 커버링 테이프


큰방: 벽면 곰팡이 난 부분 벽지 제거

큰방: 벽면 곰팡이 난 부분 곰팡이 제거

큰방: 벽면 곰팡이 난 부분 곰팡이 방지제 발포

큰방: 벽면 곰팡이 난 부분 퍼티 바르기

큰방: 벽면 곰팡이 난 부분 퍼티 사포질

거실: 큰 방 쪽 벽면 청소

거실: 큰 방 쪽 벽면 옆과 천장 마스킹/커버링 테이프

거실: 바닥면 전체 커버링 테이프

거실: 베란다 창틀 옆 마스킹 테이프

큰방: 벽면 곰팡이 난 부분 퍼티 청소

거실: 에어컨 환기구 커버 청소

거실: 걸레받이 청소

거실: 문틀 청소


큰방: 벽면 곰팡이 난 부분 퍼티 젯소 1회

거실: 에어컨 환기구 젯소 1회

거실: 걸레받이 젯소 1회

거실: 문틀 젯소 1회

거실: 화장실 문 구멍난 부분, 썩은 부분 퍼티질

거실: 화장실 문 구멍난 부분, 썩은 부분 퍼티 사포질

거실: 화장실 문 구멍난 부분, 썩은 부분 퍼티 청소

거실: 에어컨 환기구 하얀색 가구용 페인트칠 1

거실: 에어컨 환기구 하얀색 가구용 페인트칠 2

거실: 베란다 창틀 하얀색 가구용 페인트칠 1

거실: 베란다 창틀 하얀색 가구용 페인트칠 2

작은방: 걸레받이 하얀색 가구용 페인트칠 1

작은방: 걸레받이 하얀색 가구용 페인트칠 2

작은방: 창틀 하얀색 가구용 페인트칠 1

작은방: 창틀 하얀색 가구용 페인트칠 2

거실: 걸레받이 하얀색 가구용 페인트칠 1

거실: 걸레받이 하얀색 가구용 페인트칠 2

현관: 현관 문 벽면과 현관 옆 벽면 하얀색 벽용 페인트칠 1

현관: 현관 문 벽면과 현관 옆 벽면 하얀색 벽용 페인트칠 2

거실: 큰 방 쪽 벽면 하얀색 벽용 페인트칠 1

거실: 큰 방 쪽 벽면 하얀색 벽용 페인트칠 2

화장실: 문틀 옆 썩은 부분 퍼티 사포질

화장실: 문틀 옆 썩은 부분 퍼티 청소

거실: 문틀 옆 마스킹 테이프

거실: 문 4개 젯소 1회


거실: 문틀 남색 가구용 페인트칠 1

거실: 문틀 남색 가구용 페인트칠 2

거실: 문 4개 남색 가구용 페인트칠 1

거실: 문 4개 남색 가구용 페인트칠 2

큰방: 벽면 4 청소

큰방: 벽면 4 옆/천장 커버링/마스킹

큰방: 벽면 4, 걸레받이 회색 벽용 페인트칠 1

큰방: 벽면 4, 걸레받이 회색 벽용 페인트칠 2

집 수리를 위한 할 일 목록 2차 정리

완료된 항목은 제거하고 할 일만 나열한다.

방문, 화장실 문/문틀은 남색이므로 가장 마지막에 한다.

문은 떼어내지 않고 문틀을 칠할 때 같이 칠한다.

거실의 문틀을 칠할 때, 문이 붙어 있는 모든 공간의 안쪽 문틀도 칠해야 하므로, 화장실의 문틀의 퍼티 작업이 완료되어 있어야 한다.


작업 공간 순서는 “부엌 -> 화장실 -> 거실/현관/큰방/작은방” 이 된다.

청소는 청소끼리, 커버링/마스킹은 커버링/마스킹끼리, 젯소는 젯소끼리 묶어서 하는 것을 기본으로 하고, 페인트는 연한색에서 진한색으로 묶어서 함께 하는 것을 기본 정책으로 한다.

젯소는 칠한 후 적어도 4시간, 페인트도 적어도 3시간 텀을 둔다. 퍼티는 메꾸는 것처럼 두텁게 바른 경우에는 하루, 아닌 경우에는 적어도 5시간 텀을 둔다. 우레탄 폼은 3시간 텀을 둔다.

아래에서 파악한 추가 준비물은 다음과 같다.

공통: 커버링 테이프

부엌: 가스 쇼바

옷방: 스토퍼 혹은 충격 완화 물건

화장실: 방수용 실리콘, 변기 커버, 환풍기, 문고리

페인트칠을 위해 해야 할 부분과 페인트칠 이후에 해도 되는 부분을 분리한다.

* 페인트칠을 위해 해야 하는 작업    ———————————————–


현관

벽면 칠하기 전 걸레받이 커버링 테이프

신발장 커버링 테이프

현관 문 벽면과 현관 옆 벽면 하얀색 벽용 페인트칠 1

현관 문 벽면과 현관 옆 벽면 하얀색 벽용 페인트칠 2

거실

바닥면 전체 커버링 테이프

걸레받이 청소

걸레받이 젯소 1회

걸레받이 하얀색 가구용 페인트칠 1

걸레받이 하얀색 가구용 페인트칠 2

베란다 창틀 옆 마스킹 테이프

베란다 창틀 하얀색 가구용 페인트칠 1

베란다 창틀 하얀색 가구용 페인트칠 2

큰 방 쪽 벽면 청소

큰 방 쪽 벽면 옆과 천장 마스킹/커버링 테이프

큰 방 쪽 벽면 하얀색 벽용 페인트칠 1

큰 방 쪽 벽면 하얀색 벽용 페인트칠 2

에어컨 환기구 커버 청소

에어컨 환기구 젯소 1회

에어컨 환기구 하얀색 가구용 페인트칠 1

에어컨 환기구 하얀색 가구용 페인트칠 2

문틀 청소

문틀 옆 마스킹 테이프

문틀 젯소 1회

문틀 남색 가구용 페인트칠 1

문틀 남색 가구용 페인트칠 2

화장실 문 구멍난 부분, 썩은 부분 퍼티질

화장실 문 구멍난 부분, 썩은 부분 퍼티 사포질

화장실 문 구멍난 부분, 썩은 부분 퍼티 청소

문 4개 젯소 1회

문 4개 남색 가구용 페인트칠 1

문 4개 남색 가구용 페인트칠 2

큰방

벽면 곰팡이 난 부분 벽지 제거

벽면 곰팡이 난 부분 곰팡이 제거

벽면 곰팡이 난 부분 곰팡이 방지제 발포

벽면 곰팡이 난 부분 퍼티 바르기

벽면 곰팡이 난 부분 퍼티 사포질

벽면 곰팡이 난 부분 퍼티 청소

벽면 곰팡이 난 부분 퍼티 젯소 1회

벽면 4 청소

벽면 4 옆/천장 커버링/마스킹

벽면 4, 걸레받이 회색 벽용 페인트칠 1

벽면 4, 걸레받이 회색 벽용 페인트칠 2

작은방

걸레받이 하얀색 가구용 페인트칠 1

걸레받이 하얀색 가구용 페인트칠 2

창틀 하얀색 가구용 페인트칠 1

창틀 하얀색 가구용 페인트칠 2

화장실

문틀 옆 썩은 부분 퍼티 사포질

문틀 옆 썩은 부분 퍼티 청소

* 페인트 칠 이후 해도 되는 작업    ————————————————–

부엌

싱크대 유리문 가스 쇼바 교체


작은방

큰 창 윤활제 살포


옷방

문 손잡이 부딪히는 벽면 부분 스토퍼 혹은, 충격 완화용 물건 붙히기

화장실

문고리 교체

환풍기 교체

변기 커버 교체

세면기 배수관 방수용 실리콘으로 고정

장을 더 고정시키거나, 떼어내기(떼어내면 상태보고 추가 작업 필요할 수 있음)


집 수리를 위한 할 일 목록

할 일이 너무 많으니까 정리가 안된다. 무작정 하면 시간도 더 걸릴거 같고.

가구 놓고, 배치하고 하려면, 살림살이 채우려면 시간이 없다.

재료도 한번에 쓸 때 같이 쓰는게 좋다. 롤러나 붓의 세척 시간도 줄일 수 있고,

페인트나 젯소, 퍼티는 뚜껑을 땄다가 다시 밀봉할 때 신경 쓰인다.

기본적으로 페인트칠은 “청소 -> 커버링/마스킹 -> 젯소 -> 페인트 1 -> 페인트 2” 이다.

젯소를 바르지 않고 바로 벽면을 칠할 때는 “청소 -> 커버링/마스킹 -> 페인트 1 -> 페인트 2” 이다.

부엌을 먼저 한 후에, 거실의 큰 베란다 창문을 부엌으로 옮긴 후 거실 작업을 한다. 때문에 부엌 작업을 제일 우선 마쳐야 한다.

방문, 화장실 문/문틀은 남색이므로 가장 마지막에 한다.

문의 경첩이 붙은 면도 칠할 때, 붙은 채로는 칠하기 불편하고, 가장 진한색 페인트가 벽면이나 문틀에 튈 수 있으므로 모두 떼어낸다. 경첩은 떼지 않고 함께 칠한다. 떼어낸 문은 모두 베란다에 둔다. 거실 작업을 끝낸 후 거실 가운데 칠할 수 있는 공간을 만든다.

거실의 문틀을 칠할 때, 문이 붙어 있는 모든 공간의 안쪽 문틀도 칠해야 하므로, 화장실의 문틀의 퍼티 작업이 완료되어 있어야 한다.

따라서 작업 공간 순서는 “부엌 -> 화장실 -> 거실/현관/큰방/작은방” 이 된다.

청소는 청소끼리, 커버링/마스킹은 커버링/마스킹끼리, 젯소는 젯소끼리 묶어서 하는 것을 기본으로 하고, 페인트는 연한색에서 진한색으로 묶어서 함께 하는 것을 기본 정책으로 한다.

젯소는 칠한 후 적어도 3시간, 페인트도 적어도 4시간 텀을 둔다. 퍼티는 메꾸는 것처럼 두텁게 바른 경우에는 하루, 아닌 경우에는 적어도 5시간 텀을 둔다. 우레탄 폼은 3시간 텀을 둔다.

현재까지의 완료 목록을 포함하여 작업 목록을 일단 작성한다. 내가 작업하지 않은 부분은 어디까지 된건지 파악이 정확히 안됐으므로, 파악해서 완료를 체크한다.

아래에서 파악한 추가 준비물은 다음과 같다.

공통: 커버링 테이프, 마스킹 테이프

부엌: 가스 쇼바, 추

거실: 불연성(혹은 난연성) 우레탄 폼, 목공 본드, 클램프, 스텐 나사

큰방: 락스, 곰팡이 방지제

옷방: 스토퍼 혹은 충격 완화 물건

화장실: 방수용 실리콘, 변기 커버, 환풍기, 문고리

다쓰고 보니, 내가 헷갈릴만 했다, 정리가 안될만 했다 싶다.

내일은 이를 바탕으로 작업 순서의 의존성을 파악해 작업 순서를 배치/결정한다.

부엌

싱크대 바닥 커버링 테이프 (완료)

싱크대 금속 커버링 & 마스킹 테이프 (완료)

벽면 바닥 커버링 테이프 (완료)

걸레받이 청소 (완료)

걸레받이 젯소 1회 (완료)

베란다 창틀 청소 1회 (완료)

베란다 창틀 젯소 1회 (완료)

베란다 창틀 하얀색 가구용 페인트칠 1 (완료)

베란다 창틀 하얀색 가구용 페인트칠 2 (완료)

싱크대 청소 (완료)

싱크대 젯소 1회 (완료)

싱크대 하얀색 가구용 페인트칠 1 (맨 아래면 남음)

싱크대 하얀색 가구용 페인트칠 2 (윗면과 옆면, 맨 아래면 남음)

벽면 구멍 퍼티 바르기 (완료)

벽면 구멍 퍼티 사포질 (완료)

벽면 구멍 퍼티 청소 (완료)

벽면 구멍 퍼티 젯소 1회

벽면 파란색 페인트칠 1

벽면 파란색 페인트칠 1

벽면 파란색 페인트칠 2

싱크대 유리문 가스 쇼바 교체

싱크대 샤워기 줄 꼬인거 풀거나 추를 추가 장착

현관

걸레받이 옆 마스킹 테이프 (완료)

신발장 아래 커버링 테이프 (완료)

걸레받이 청소 (생략)

걸레받이 젯소 1회 (완료)

걸레받이 하얀색 가구용 페인트칠 1 (완료)

걸레받이 하얀색 가구용 페인트칠 2 (완료)

신발장 청소 (생략)

신발장 젯소 1회 (완료)

신발장 하얀색 가구용 페인트칠 1 (완료)

신발장 하얀색 가구용 페인트칠 2 (완료)

벽면 칠하기 전 걸레받이 커버링 테이프

신발장 커버링 테이프

현관 문 벽면과 현관 옆 벽면 하얀색 벽용 페인트칠 1

현관 문 벽면과 현관 옆 벽면 하얀색 벽용 페인트칠 2

거실

바닥면 전체 커버링 테이프

걸레받이 청소

걸레받이 옆 마스킹 테이프

걸레받이 젯소 1회

걸레받이 하얀색 가구용 페인트칠 1

걸레받이 하얀색 가구용 페인트칠 2

베란다 창틀 청소

베란다 창틀 옆 전선 떼기

베란다 창틀 옆 마스킹 테이프

베란다 창틀 젯소 1회

베란다 창틀 하얀색 가구용 페인트칠 1

베란다 창틀 하얀색 가구용 페인트칠 2

에어컨 구멍 퍼티 바르기

에어컨 구멍 퍼티 사포질

에어컨 구멍 퍼티 청소

에어컨 구멍 젯소

큰 방 쪽 벽면 청소

큰 방 쪽 벽면 옆과 천장 마스킹/커버링 테이프

큰 방 쪽 벽면 하얀색 벽용 페인트칠 1

큰 방 쪽 벽면 하얀색 벽용 페인트칠 2

에어컨 환기구 커버 청소

에어컨 환기구 젯소 1회

에어컨 환기구 하얀색 가구용 페인트칠 1

에어컨 환기구 하얀색 가구용 페인트칠 2

문 떼어내서 베란다로 이동

문틀 청소

문틀 옆 마스킹 테이프

문틀 젯소 1회

문틀 남색 가구용 페인트칠 1

문틀 남색 가구용 페인트칠 2

문 4개 시트지 제거

문 4개 청소

화장실 문 목공 본드 및 클램프

화장실 문 목공 스텐 나사 박기

화장실 문 구멍난 부분 우레탄 폼 발사

화장실 문 구멍난 부분 우레탄 폼 잘라내기

화장실 문 구멍난 부분, 썩은 부분 퍼티질

화장실 문 구멍난 부분, 썩은 부분 퍼티 사포질

화장실 문 구멍난 부분, 썩은 부분 퍼티 청소

문 4개 젯소 1회

문 4개 남색 가구용 페인트칠 1

문 4개 남색 가구용 페인트칠 2

큰방

바닥면 전체 커버링 테이프

걸레받이 청소

걸레받이 옆 마스킹 테이프

걸레받이 젯소 1회

창틀 두개 청소

창틀 두개 옆 마스킹 테이프

창틀 젯소 1회

창틀 하얀색 가구용 페인트칠 1

창틀 하얀색 가구용 페인트칠 2

벽면 곰팡이 난 부분 벽지 제거

벽면 곰팡이 난 부분 곰팡이 제거

벽면 곰팡이 난 부분 곰팡이 방지제 발포

벽면 곰팡이 난 부분 퍼티 바르기

벽면 곰팡이 난 부분 퍼티 사포질

벽면 곰팡이 난 부분 퍼티 청소

벽면 곰팡이 난 부분 퍼티 젯소 1회

벽면 4 청소

벽면 4 옆/천장 커버링/마스킹

벽면 4, 걸레받이 회색 벽용 페인트칠 1

벽면 4, 걸레받이 회색 벽용 페인트칠 2

작은방

바닥면 전체 커버링 테이프(완료)

걸레받이 청소

걸레받이 옆 마스킹 테이프

걸레받이 젯소 1회

걸레받이 하얀색 가구용 페인트칠 1

걸레받이 하얀색 가구용 페인트칠 2

창틀 청소

창틀 옆 마스킹/커버링

창틀 젯소 1회

창틀 하얀색 가구용 페인트칠 1

창틀 하얀색 가구용 페인트칠 2

큰 창 윤활제 살포

옷방

문 손잡이 부딪히는 벽면 부분 스토퍼 혹은, 충격 완화용 물건 붙히기

화장실

문 아래 썩은 부분 퍼티 바르기

문 아래 썩은 부분 퍼티 사포질

문 아래 썩은 부분 퍼티 청소

문고리 교체

환풍기 교체

변기 커버 교체

세면기 배수관 방수용 실리콘으로 고정

장을 더 고정시키거나, 떼어내기(떼어내면 상태보고 추가 작업 필요할 수 있음)

파베 초콜릿 만들기

1. 코코아 함량이 65% 이상인 초콜렛을 뜨거운 물 위에 보울을 올려두고 그 위에서 은근히 녹인다.
2. 90% 정도 녹았다 싶으면 무염버터를 넣고 저으면서 끝까지 녹인다.
3. 뜨거운 물 위에서 떼어내고, 초콜릿과 1/2, 혹은 1/3 비율의 생크림을 넣고 잘 저어 섞는다. 생크림 비율이 높으면 초콜릿이 더 잘 녹는다고 한다. 생크림은 휘핑크림 말고, 크림 파스타 등에 들어가는 액체 형태의 생크림.
4. 열전도율이 높은 그릇에 비닐 봉지를 깔고 그 위에 녹인 초콜릿을 붓는다. 슬슬 흔들어 높이가 고르게 만든다.
5. 냉장고에서 약 30분 정도 식힌다.
6. 꺼내서 네모나게 잘라 녹차가루, 코코아 가루를 묻히면 완성

[Windows] Tortoise*를 사용할 때 Icon Overlay 안보이는 문제

Windows 7 등에서 TortoiseCVS, TortoiseSVN, TortoiseGit, TortoiseHg 등을 사용할 때, 아이콘 오버레이가 안보이는 경우가 있다.

이 경우 레지스트리 문제인데, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 아래에 Sub key 가 너무 많아서 그렇다. 15개 까지만 보인다고 한다.

잘 안쓰이는 Icon Overlay 항목에 그냥 “z_”를 추가시켜서 정렬했을 때 아래로 가도록 만들자. 수정 후에는 로그오프/로그인. 간단히 재부팅해도 되고~

참고 : http://stackoverflow.com/questions/1057734/tortoisesvn-icons-not-showing-up-under-windows-7

구글의 Python Tutorial

[번역] 구글의 파이썬 튜토리얼 요약.
원문은 Google’s Python Class(https://developers.google.com/edu/python/)

* Python 환경 설정

나올 때 윈도우에서는 Ctrl-Z, 다른 OS에서는 Ctrl-D

* Introduction

if __name__ == ‘__main__’:
    main()

sys.argv[0]는 프로그램 이름, sys.argv[1]은 첫번째 인자, sys.argv[2]는 두번째 인자…

TAB 문자 대신 Space들을 입력.

help(len) : len 함수에 대한 문서를 출력
dir(sys): sys 모듈에 대한 전반적인 문서
help(sys.exit): sys 내의 exit() 함수에 대한 문서

* Strings

파이썬 스트링은 “immutable”하다. 즉, 생성 후에 값을 변경할 수 없다. 따라서 다른 값이 되면 새로운 스트링이 생성된다.

“”” 로 여러줄 string 가능

[ ]로 문자 접근 가능
Slice로 substring 얻기
len(string) 은 string의 길이. sequence 타입에는 다 사용 가능
‘+’ 로 concatenate.

Value를 string 으로 변경하고 싶을 때는 str() 함수를 사용

pi = 3.14
text = ‘The value of pi is ‘ + str(pi)

정수로 나눗셈을 할 때는 // 를 사용. 6 // 5 == 1

print 뒤에 줄바꿈을 하고 싶지 않으면 마지막에 , 를 붙인다.
r 을 앞에 붙이면 ‘raw’ string. \ 를 특별히 취급하지 않는다. r’x\nx’ 는 ‘x\nx’ 가 됨. u 를 앞에 붙이면 unicode.

s.lower(), s.upper(): 소문자, 대문자로
s.strip(): 앞 뒤의 whitespace 제거
s.isalpha() / s.isdigit() / s.isspace(): 알파벳인지, 숫자인지, space인지
s.startswith(‘other’), s.endswith(‘other’): s 스트링이 다른 특정 스트링으로 시작하거나 끝나는지.
s.find(‘other’): s 스트링 안의 다른 스트링을 찾는다. 찾으면 인덱스 리턴, 못찾으면 -1
s.replace(‘old’, ‘new’): 모든 ‘old’를 ‘new’로 변경한 string 리턴
s.split(‘delim’): 주어진 delimiter로 자른 substring 리스트를 리턴,
s.join(list): split()의 반대, s를 delimiter로 리스트를 합친다.

길이가 1인 string 에 ==, <= 등의 작업을 할 수 있다. char 타입이 따로 없다.

H  e  l  l  o
0  1  2  3  4
-5 -4 -3 -2 -1

s[1:4]는 ‘ell’, s[1:]는 ‘ello’, s[:]는 ‘Hello’의 복사본, s[1:100]은 ‘ello’ – 더 큰 index를 사용하면 string의 length나 마찬가지가 된다.
s[-1]은 ‘o’, s[-4]은 ‘e’, s[:-3]은 ‘He’, s[-3:]은 ‘llo’
s[:n] + s[n:] == s 는 항상 참. n이 음수거나, index영역을 벗어났을 때도 성립.

% 연산자를 사용해 printf 같은 format string. %d는 int, %s는 string, %f/%g는 float, 오른쪽에 튜플.

text = “%d little pigs come out or I’ll %s and %s and %s” % (3, ‘huff’, ‘puff’, ‘blow down’)

너무 길면 전체 expression을 괄호로 싸면 된다.

text = (“%d little pigs come out or I’ll %s and %s and %s” %
    (3, ‘huff’, ‘puff’, ‘blow down’))

unistring.encode()와 unicode로 encoding 변환.

s = unistring.encode(‘utf-8’)
t = unicode(s, ‘utf-8’)
t == unistring

if / elif/ else. “zero” 값들(None, 0, “”, ”, [], {}, False)은 false, True/False로 boolean 값, and, or, not 사용. ()로 expression 을 감싸지 않는다.

* Lists

= 을 사용하면 그냥 reference.
‘+’ 를 사용해 list를 합칠 수 있다.

for와 in 으로 iteration

squares = [1, 4, 9, 16]
sum = 0
for num in squares:
    sum += num
print sum ## 30

in 은 독립적으로 어떤 원소가 list(또는 다른 collection)에 있는지 테스트 할 수 있다.

list = [‘larry’, ‘curly’, ‘moe’]
if ‘curly’ in list:
    print ‘yay’

range(n)은 0, 1, 2, …, n-1 까지의 숫자를 리턴. range(a, b) 는 a, a+1, a+2, …, b-1 까지를 리턴.

for i in range(100):
    print i

xrange()는 전체 리스트를 만드는 과정을 없애 성능 상 좋다.

while

i = 0
while i < len(a):
    print a[i]
    i = i + 3

list.append(elem): 리스트를 수정하여 가장 뒤에 elem 추가. 리턴하지 않는다.
list.insert(index, elem): index에 elem을 추가. 리턴하지 않는다.
list.extend(list2): list2의 원소들을 list에 추가. 리턴하지 않는다.
list.index(elem): elem이 있으면 index 리턴, 없으면 ValueError를 발생. ValueError 없이 확인하려면 in 을 사용.
list.remove(elem): 첫번째 elem을 제거, 없으면 ValueError. 리턴하지 않는다.
list.sort(): list를 sort. 리턴하지 않는다. sorted()를 더 자주 사용.
list.reverse(): list를 역순으로 변경. 리턴하지 않는다.
list.pop(index): index의 원소를 제거하고 리턴. index를 생략하면 가장 끝의 원소를 리턴(append()와 반대)

* Sorting

sorted()를 사용. reverse=True를 전달하면 역순. Case sensitive하다.

strs = [‘aa’, ‘BB’, ‘zz’, ‘CC’]
print sorted(strs) ## [‘BB’, ‘CC’, ‘aa’, ‘zz’] 
print sorted(strs, reverse=True) ## [‘zz’, ‘aa’, ‘CC’, ‘BB’]

key로 함수를 전달하면 해당 함수를 key로 정렬. key=len, key=str.lower 하면 대소문자 동일하게 취급하여 정렬.

print sorted(strs, key=str.lower) ## [‘aa’, ‘BB’, ‘CC’, ‘zz’]

key로 custom 함수 전달 가능

def MyFn(s):
    return s[-1]
print sorted(strs, key=MyFn)

cmp=cmpFn 선택 인자를 전달할 수도 있음. 내장 함수는 cmp(a, b)로 -/0/+ 로 순서를 리턴

Tuple은 struct와 비슷한 역할. 변경 불가능, 크기가 변하지 않음. () 를 통해 만듦. 크기가 1인 튜플은 ( 1, ) 처럼 , 을 넣어 만듦.

변수 할당에 사용 가능. 반환값이 여러 값을 가진 경우도 사용 가능
(x, y, z) = (42, 13, “Hike”)
(err_string, err_code) = foo()

[ _expr_ for var in list ] 형태로 원하는 형태의 리스트 생성 가능.

fruits = [‘apple’, ‘cherry’, ‘banana’, ‘lemon’]
afruits = [ s.upper() for s in fruits if ‘a’ in s ] ## [‘APPLE’, ‘BANANA’]

* Dictionaries and Files

dict = {}
dict[‘a’] = ‘alpha’
dict[‘g’] = ‘gamma’
dict[‘o’] = ‘omega’

print dict[‘a’] ## ‘alpha’
dict[‘a’] = 6
‘a’ in dict ## True
## print dict[‘z’] ## Throws KeyError
if ‘z’ in dict: print dict[‘z’] ## KeyError를 피한다.
print dict.get(‘z’) ## None

dict.get(key, not-found) 형태로 키가 없을 경우 not-found 로 설정한 값을 리턴하도록 할 수도 있다.

dict.keys(): key 리스트
dict.values(): value 리스트
dict.items(): (key, value) 튜플의 리스트

for k, v in dict.items(): print k, ‘>’, v

iterkeys(), itervalues(), iteritems()는 전체 리스트를 만들지 않아 성능 상 좋다.

hash = {}
hash[‘word’] = ‘garfield’
hash[‘count’] = 42
s = ‘I want %(count)d copies of %(word)s’ % hash # ‘I want 42 copies of garfield’

del 로 변수, list 원소, dict key/value를 지울 수 있다.

Files open(), close(). open 시 ‘rU’를 사용하면 줄바꿈을 ‘\n’으로 변형하여 준다.

f = open(‘foo.txt’,’rU’)
for line in f: ## 파일을 한 줄씩 방문
    print line, ## line 끝에 이미 줄바꿈이 포함되어 있으므로 print가 줄바꿈하지 않도록 한다.
f.close()

f.readlines()는 전체를 메모리에 올리고 줄들의 list를 리턴, read()는 전체 파일을 하나의 string으로.

파일에 쓰려면, f.write(string). print를 사용하려면, print >> f, string. python 3에서는 print(string, file=f)

codes는 unicode를 읽을 때 사용 가능

import codecs
f = codecs.open(‘foo.txt’, ‘rU’, ‘utf-8’)
for line in f: # line은 unicode string이 됨.

* Regular expression

import re
str = ‘an example word:cat!!’
match = re.search(r’word:\w\w\w’, str)
if match:
    print ‘검색 성공’, match.group() ## 발견 word:cat
else
    print ‘검색 실패’

패턴 스트링은 항상 r로 시작.

a, X, 9: 있는 그대로의 문자를 매치
.: 아무 문자 하나를 매치. \n 은 제외
\w: 하나의 word에 쓰이는 문자 하나를 매치(단어가 아님). a-z, A-Z, 0-9, _ [a-zA-Z0-9_]를 매치.
\W: non-word에 쓰이는 문자 하나를 매치
\b: word와 non-word의 경계
\s: 하나의 whitespace 문자[ \n\r\t\f]를 매치
\S: whitespace 이외의 문자를 매치
\d: 숫자 [0-9]
^: 시작
$: 끝
\를 붙여 위의 것들을 그저 문자로 사용 가능

+: 왼쪽 패턴 1개 이상.
*: 왼쪽 패턴 0개 이상.
?: 왼쪽 패턴 0개 혹은 1개
+와 *는 가장 왼쪽의 것을 찾고, greedy 하다. 

r'[\w.-]+@[\w.-]+’ 로 @ 주위에 ‘.’와 ‘-‘도 매치하도록 할 수 있다. -가 구간을 매치하지 않도록 하려면 가장 마지막에 넣는다.
[] 안의 내용을 ^로 시작하면 집합을 뒤집는다. [^ab]는 ‘a’와 ‘b’를 제외한 모든 문자를 뜻한다.

패턴 안에 ( )를 넣으면 그룹으로 구분할 수 있게 해준다.

str = ‘purple alice-b@google.com monkey dishwasher’
match = re.search(r'([\w.-]+)@([\w.-]+)’, str)
if match
    print match.group() ## ‘alice-b@google.com’
    print match.group(1) ## ‘alice-b’
    print match.group(2) ## ‘google.com’

findall(): 모든 패턴에 해당하는 string 리스트를 리턴

f = open(‘text.txt’, ‘r’)
strings = re.findall(r’some pattern’, f.read())

findall 에 ( )를 넣으면 그룹에 해당하는 튜플 리스트를 만든다.

str = ‘purple alice@google.com, blah monkey bob@abc.com blah dishwasher’
tuples = re.findall(r'(\w\.-]+)@([\w\.-]+)’, str)
print tuples ## [(‘alice’, ‘google.com’), (‘bob’, ‘abc.com’)]
for tuple in tuples:
    print tuple[0] ## username
    print tuple[1] ## host

re.search(pat, str, re.IGNORECASE) 처럼 추가 옵션 가능
IGNORECASE: 대소문자 구별하지 않음
DOTALL: 마침표 . 이 newline을 매치하도록 한다. 보통은 newline을 제외한 모든것들을 매치.
MULTILINE: 여러줄로 이루어진 string에서 ^와 $가 줄의 시작과 끝을 매치하도록 한다. 보통은 ^ $는 전체 스트링의 시작과 끝을 매치한다.

정규 표현식의 확장으로 .*? 나 .+?처럼 ?를 끝에 더해서 greedy 하지 않게 변경할 수 있다.

str = ‘<b>foo</b> and <i>so on</i>’
match = re.search(r'(<.*>)’, str)
if match:
    print match.group() ##'<b>foo</b> and <i>so on</i>’
match = re.search(r'(<.*?>)’, str)
if match:
    print match.group() ## ‘<b>’

re.sub(pat, replacement, str) 은 str에서 pat과 매치되는 모든 스트링들을 찾아 replacement로 치환한다. replacement 스트링은 \1, \2 를 이용하여 group(1), group(2)를 표현할 수 있다.

str = ‘purple alice@google.com, blah monkey bob@abc.com blah dishwasher’
print re.sub(r'([\w\.-]+)@([\w\.-]+)’, r’\1@yo-yo-dyne.com’, str)
# purple alice@yo-yo-dyne.com, blah monkey bob@yo-yo-dyne.com blah dishwasher

* Utilities

os 모듈
filenames = os.listdir(dir): dir에 있는 .과 ..을 제외한 파일이름들의 리스트, 절대경로가 아님.
os.path.join(dir, filename): filename과 dir을 합쳐서 path를 만든다.
os.path.abspath(path): path를 받아서 절대 경로를 리턴
os.path.dirname(path), os.path.basename(path): dir/foo/bar.html을 받아서 dirname ‘dir/foo’와 basename’bar.html’을 리턴
os.path.exists(path): path 가 존재하면 True를 리턴
os.mkdir(dir_path): dir 하나를 만든다.
os.makedirs(dir_path): dir_path를 만들기 위한 모든 디렉토리들을 만든다.
shutil.copy(source-path, dest-path): 파일을 복사한다. 복사될 디렉토리가 존재해야 한다.

commands 모듈: 외부 명령을 실행하고 결과물을 얻어옴.
(status, output) = commands.getstatusoutput(cmd): cmd를 실행하고 exit할 때까지 기다려서,
status int값과 output text를 tuple로 리턴한다. stdout과 stderr이 하나의 출력물로 합쳐져서 나타난다.
output = commands.getoutput(cmd): 위와 동일, status값을 받지 않는다는 것만 다름.
commands.getstatus() 라는 함수는 사용하지 말아라.
sub-process에 대한 더 많은 제어권을 원하면 “popen2” 모듈을 보라.
os.system(cmd): cmd의 결과물을 여러분 코드의 output으로 출력하고, error 코드를 리턴.

try/except. ‘except IOError, e:’ 의 형태로 exception 객체에 대한 포인터를 얻을 수 있다.

try:
  f = open(filename, ‘rU’)
  text = f.read()
  f.close()
except IOError:
  sys.stderr.write(‘problem reading:’ + filename)

urllib 모듈: url을 마치 file처럼 읽을 수 있게 한다. urlparse 모듈은 url을 분해하거나 합치는 기능을 제공
ufile = urllib.urlopen(url): url에 대한 file 같은 객체를 리턴
text = ufile.read(): 파일처럼 읽음. readlines()도 사용 가능
info = ufile.info(): 요청에 대한 meta 정보를 리턴. info.gettype() 으로 ‘text/html’ 같은 mime 타입을 얻어 옴.
baseurl = ufile.geturl(): 요청에 대한 “base” url을 얻어옴. redirect로 인해 open할 때 사용한 url과 다를 수 있다.
urllib.urlretrieve(url, filename): url의 데이터를 다운받아 filename의 file로 저장한다.
urlparse.urljoin(baseurl, url): full url을 만든다.

def wget2(url):
  try:
    ufile.urllib.urlopen(url)
    if ufile.info().gettype() == ‘text/html’:
      print ufile.read()
  except IOError:
    prit ‘problem reading url:’, url

[Linux:Kernel] Documentation/io-mapping.txt

이 문서의 저작권은 GPL 라이센스를 따릅니다(This document is released under GPL license).
Documentation/io-mapping.txt
번역: 양정석 <dasomoli@gmailREMOVETHIS.com>
linux/io-mapping.h 안의 io_mapping 함수들은 CPU에 I/O 디바이스들의 작은 영역을
효율적으로 맵핑하는 추상화를 제공합니다. 애초의 용도는 ioremap_wc가 커널 주소
영역을 너무 많이 소비할 때 처럼 CPU에 전체 영역을 정적으로 맵핑할 수 없을 때,
32비트 프로세서들에서 큰 그래픽 영역을 제공하기 위함입니다.
맵핑 객체는 드라이버 초기화 중에 다음을 사용하여 생성합니다
        struct io_mapping *io_mapping_create_wc(unsigned long base,
                                                unsigned long size)
                ‘base’는 맵핑 가능하게 만들어 질 영역의 버스 주소인 반면,
                ‘size’는 얼마나 크게 영역을 맵핑할 것인지를 나타냅니다.
                둘다 바이트 수 입니다.
                이 _wc 변형은 io_mapping_map_atomic_wc나 io_mapping_map_wc로만
                사용할 수 있는 맵핑을 제공합니다.
이 맵핑 객체로, 개별 페이지들이 자동적으로, 혹은 아니게 필요한 스케줄링 환경에
따라 맵핑될 수 있습니다. 물론, 어토믹 맵핑은 더 효율적입니다:
        void *io_mapping_map_atomic_wc(struct io_mapping *mapping,
                                       unsigned long offset)
                ‘offset’은 정의된 맵핑 영역 안에서의 오프셋입니다. 생성 함수
                에서 지정된 영역을 넘어서서 주소를 접근하는 것은 정의되지
                않은 결과를 불러옵니다. 페이지 정렬되지 않은 오프셋을
                사용하는 것도 정의되지 않은 결과를 불러옵니다. 반환 값은
                CPU 주소 공간 안의 한 페이지를 가리킵니다.
                이 _wc 변형은 페이지로의 write-combining 맵핑을 반환하고,
                io_mapping_create_wc에 의해 생성된 맵핑에만 사용가능합니다.
                태스크가 이 맵핑된 페이지를 잡고 있는 동안 슬립하지 않음을
                알아두세요.
        void io_mapping_unmap_atomic(void *vaddr)
                ‘vaddr’은 반드시 마지막 io_mapping_map_atomic_wc 호출에
                의해 반환된 값이어야 합니다. 이것은 지정된 페이지를 맵핑
                해제하고 그 태스크가 다시 한번 잠들 수 있게 합니다.
여러분이 그 락을 잡은 동안 슬립해야할 필요가 있다면, 극히 더 느리긴 하지만,
어토믹이 아닌 변형을 사용할 수 있습니다.
        void *io_mapping_map_wc(struct io_mapping *mapping,
                                unsigned long offset)
                이것은 태스크가 맵핑된 페이지를 잡고 있는 동안 슬립할 수 있다는
                것을 제외하면 io_mapping_map_atomic_wc와 같이 동작합니다.
        void io_mapping_unmap(void *vaddr)
                이것은 io_mapping_map_wc로 매핑된 페이지들이 사용되는 것을
                제외하면 io_mapping_unmap_atomic과 같이 동작합니다.
드라이버에 가까운 시간에, io_mapping 객체는 반드시 해제되어야만 합니다:
        void io_mapping_free(struct io_mapping *mapping)
현재 구현:
이들 함수의 초기 구현은 이미 구현된 맵핑 메카니즘을 사용해서 오직 추상 계층만
제공하고 새로운 기능은 없습니다.
64비트 프로세서에서 io_mapping_create_wc는 자원으로의 영구적으로 커널이 볼 수
있는 맵핑을 생성하는 전체 영역을 위해서 ioremap_wc를 호출합니다. 그 map_atomic과
map 함수들은 ioremap_wc에 의해 반환되는 가상 주소의 기준점으로부터의 요청된
오프셋을 더합니다.
HIGHMEM이 정의된 32비트 프로세서에서는 io_mappinc_map_atomic_wc가
kmap_atomic_pfn을 지정된 페이지를 어토믹하게 맵핑하는데 사용됩니다;
kmap_atimic_pfn은 디바이스 페이지와 사용될 것이라고 정말 여겨지지 않았습니다만,
이 용도를 위한 효율적인 맵핑을 제공합니다.
HIGHMEM 정의가 없는 32비트 프로세서에서는 io_mapping_map_atomic_wc와
io_mapping_map_wc 모두 새로운 맵핑을 모든 프로세서에 알리기 위해서 IPI를 수행하는
극악하게 비효율적인 함수인 ioremap_wc를 사용합니다. 이것은 극적인 성능 저하를
가져옵니다.