Google의 New Business Manager, 김현유님을 만나다! 를 읽고.

Google의 New Business Manager, 김현유님을 만나다!

Google이나 실리콘밸리 기업들에 대한 여러 단면들을 보여준다. 또한 개인 커리어 관리에 대한 생각 역시 하게 한다. 국내(내가 다니고 있는 회사를 포함하여)와 실리콘밸리의 기업문화 비교 역시 흥미롭다.

특히 인상적이었던 것들은,

1. 멀리 내다보고 기회 포착을 위해 준비하는 자세
2. 그를 위해 조직을 만들고 이끄는 능력
3. 자신의 경험들에 대한 긍정적인 자세
4. 어려운 설명을 예를 들거나, 쉬운 용어로 쉽게 설명하는 능력
5. 기술적 트렌드에 대한 전망과 그 변화를 읽는 눈
6. 자신이 하고 싶은 일을 차후에 언제, 어떻게 할 수 있을 것 같다는 생각
7. 기업 문화의 장/단점을 포착하는 통찰력, 이를 사회 혹은 조직 전체적인 시각에서 바라보는 눈
8. 자신이 사업 체질인지 커리어 체질인지를 파악하고 인지하고 있다는 점

등이다. 이외에도 블로그를 보면 댓글들에서 상대의 좋은 부분을 꼭 칭찬하는 습관이 있음을 볼 수 있었다.

장점들은 배운다. 그리고 꼭 행동하고 실천하자.

p.s 글에 링크되어 있는 다른 글들 역시 읽어볼만한하다.

마지막 강의 중 되새길 만한 문구들..

각각의 줄마다 내 생각들을 달고 싶지만 그러기엔 너무 길어지겠다.
————————————————————————
“무엇이 날 유일무이한 사람으로 만들까?”

그날 나는 양복을 입지 않았다. … 대신에 나는 옷장에서 찾을 수 있는 것으로 최대한 적절하게 조합한 ‘유년스러운 꿈꾸는 복장’차림을 선택했다.

제 아버지는 항상 이렇게 말씀하셨어요. 방안에 코끼리가 있으면 그 코끼리(Elephant in the room)부터 소개하라고.

모든 이야기에는 타당한 동기가 있어야 한다

최후의 순간까지 결정을 늦추어라

일에서나 사람관계에서나 설령 내 쪽에 힘이 있다 해도 언제나 공평해야 한다고 주의를 주었다. “운전석에 앉았다고 해서, 사람들을 치고 다닐 필요는 없는 거니까.”

구체적인 꿈을 갖는다는 건 중요한 일이다.

상대방에게 득이 될 만한 것을 제시하라. 그래야 환영 받을 수 있다.

때로 나는 그 꿈을 성취하려고 노력하는 단계에서 보다 더 많은 것을 배웠다고 생각한다.

당신은 반드시 기초부터 제대로 익혀야 한다. 그렇지 않으면 그 어떤 화려한 것도 해낼 수가 없다.

“네가 잘못하고 있는데도 더 이상 너에게 아무 말도 하지 않는다면, 그건 널 포기했다는 뜻이야.”

자신감을 발달시키는 데는 오직 한 가지 방법만이 존재한다는 것을 알고 있었다. 아이들에게 도저히 가능해 보이지 않는 과제를 내주고, 할 수 있다는 것을 스스로 알게 될 때까지 열심히 노력하게 이끈다. 그리고 계속 그 과정을 반복하라.

우리가 아이들에게 미식축구나, 축구, 수영 등의 조직적인 스포츠를 가르칠 때 아이들이 경기의 룰만 배우기를 원하는 것은 아니다. 아이들이 배웠으면 하는 것은 훨씬 더 중요한 것들이다. … 이러한 종류의 우회적인 가르침을 ‘헤드 페이크’라고 명명할 수 있을 것이다. … 그것은 바로 과정에 푹 빠져들 때까지 배우는 사람으로 하여금 자신이 진정 배우고 있는 것이 무엇인지 모르게 하는 속임수다.

자신이 어느 부분을 이해하지 못하는가 알고 있었으며 그 점을 기꺼이 시인하고, 이해가 될 때까지 물고 늘어질 줄 아는 훌륭한 사람이었다.

끈기는 미덕이다. 그렇지만 당신이 얼마나 노력하는지 모든 이들이 언제나 지켜보고 있어야 할 이유는 없다.

장벽이 거기 서 있는 것은 가로막기 위해서가 아니며, 그것은 우리가 얼마나 간절히 원하는지 보여줄 기회를 주기 위해 거기에 서 있는 것이었다.

유식한 사람들의 말을 따라 하면 유식해 보이는 것은 식은 죽 먹기다.

바로 여기에 모든 책임자 혹은 관리자에 대한 교훈이 있다. … 둘다 나의 안식년 계획이 좋은 아이디어 인지는 확신하지 못했지만 그것을 표현하는 방식은 얼마나 달랐는지 생각해보라!(p.83)

“랜디, 사람들이 너를 거만하다고 생각하는 것은 정말 안된 일이야. 그렇게 되면 네 인생에서 이룰 수 있는 것들이 한정되니까.”

“…장벽은 절실하게 원하지 않는 사람들을 걸러내려고 존재합니다. 장벽은, 당신이 아니라 ‘다른’ 사람들을 멈추게 하려고 거기 있는 것이지요.”

“그 애 마음이 정말 그런 것일까? 나는 아니라고 본다. 여태 그 애가 보여준 행동과 일치하지가 않잖니.”

자동차는 실용적인 도구이지 사회적 지위를 나타내는 수단은 아니다. 모든 걸 다 고칠 필요는 없다.

시간은 명쾌하게 관리되어야 한다. 마치 돈처럼. “난간의 밑면을 얼마나 광나게 닦는지는 아무 상관도 없는 일이다.”

가장 실용적인 목록은 과제를 잘게 쪼개 놓은 것이다.

스스로에게 물어라. 옳은 일에 시간을 쓰고 있는가?

전화를 사용하기 전 다시 생각해봐라. … 더 좋은 방법으로는 일어나서 전화하는 것이다. 그래야 빨리 끝낼 수 있다. … 누군가와 짧게 전화하고 싶은가? 그러면 점심시간 직전인 오전 11시 55분에 전화해라.

위임해라.

제대로 쉬어라. … “전화 안내원에게 물으면 그들의 전화번호를 알 수 있을 겁니다. 그런 다음 당신이 저의 장인 장모님에게 아주 급한 일로 따님의 신혼여행을 좀 방해하겠다고 설득할 수 있다면, 그들이 연락할 번호를 줄 것입니다.”

교육을 담당한 교사들의 최고 목표는 학생들에게 공부하는 법을 가르치는 것이다. … 그러나… 나는 학생들에게 스스로를 판단하는 법을 가르쳐주고 싶었다. … 자기 자신을 평가하는 능력을 개발하는 것이다.

“나는 자네 머리가 좋다는 것을 알지. 하지만 여기 있는 모두가 다 똑똑한 사람들이야. 머리 좋은 것이 다가 아니야. 내가 우리 팀에 원하는 사람은 다른 이들을 도와가며 행복하게 일하는 사람이야.”

“앤디 교수님, 제가 이번에 학생들에게 두 주짜리 과제를 내주었는데 모두 A를 줄 만큼 놀라운 작품을 제출했어요. 이제 어떻게 하죠?” “자, 이렇게 하자고. 내일 강의 시간에 학생들 눈을 똑바로 쳐다보면서 이런 식으로 말해. 너희들 말이야, 꽤 괜찮긴 했어. 하지만 더 잘할 수도 있었잖아.” … 기준을 대충 아무 높이에나 맞추는 것은 학생들에게 폐를 끼치는 일이라고 지적해주었다.

나는 어떤 팀의 과제물이 가장 좋을지 미리 예상할 수 있었다. 보디랭귀지가 다 알려주었다. 만약 어느 한 팀의 학생들이 몸이 닳을 듯 밀착해 있다면 그들이 서로 가까워졌다는 것을 알 수 있었고…

멋은 짧고 성실함은 길다.

웬일인지, 시간이 지나고 인생의 마지막이 다가오니까 항복하는 것이 옳은 일이 되어버렸다.

불평하지 마라, 그저 노력해라. 불평하는 것은 전략이 될 수 없다. 우리 모두 한정된 시간과 에너지를 가지고 있다. 우리가 불평하는 데 쓰는 아주 약간의 시간도 목표를 달성하는 데 아무런 득이 되지 않는다. 그러면 좋을 게 없지 않은가.

병을 고쳐라, 증상이 아니라.

다른 사람의 생각에 집착하지 마라.

옆에 앉는 것에서부터 시작하라.

정중하게 사람들을 대해라. 모든 일의 시작은 자기소개부터다. 연락처를 주고받아라. 사람들의 이름을 정확히 발음할 수 있게 해라.

공통점을 찾아라. 상대한테서 공통점을 찾는 일은 대부분 어렵지 않다. 그러면 거기서부터는, 당신이 꺼내놓아야 하는 다른 의견을 말하기가 훨씬 수월해진다. 스포츠는 인종과 빈부 차이의 경계를 넘나든다. 그마저도 없다면 우리 모두에게는 날씨라는 공통 화제가 있다.

최적의 만남 조건을 만들어라. 혹시 배가 고프거나 춥거나 피곤한 사람이 있는지 확인하라. 가능하면 식사시간에 만나라. 음식은 회의의 분위기를 부드럽게 한다.

모두가 이야기하게 해라. 남의 말을 자르지 마라. 그리고 큰소리로 말하거나 빠르게 말한다고 당신의 아이디어가 더 나아지는 것은 아니다.

문 앞에서 나를 버려라. 아이디어를 나눌 때, 의견 하나하나에 제목을 붙이면서 받아 적어라. 제목은 아이디어를 설명하는 것이어야 하며 발표자를 기록하는 것이 아니다. ‘제인의 이야기’가 아니라 ‘브리지 스토리’로 가야 한다는 말이다.

서로를 칭찬해라. 약간은 무리해서라도 좋은 말을 해주어라. 아무리 나쁜 아이디어라 해도 자세히 들여다보면 좋은 점이 있을 것이다.

대안을 내놓으려면 질문 형식으로 해라. “나는 B가 아닌 A로 가야한다고 생각해.”가 아닌 “만약 우리가 B가 아니고 A를 한다면 어떨까?”로 제안하라. 그래야 자신의 선택만을 고집하지 않으면서 자유롭게 토론하도록 할 수 있다.

모두에게서 장점을 찾아라. “만약 당신이 충분히 기다려 준다면, 사람들은 당신을 놀라게 하고 감동을 안겨줄 거예요.” … 당신이 사람들에게 실망하고, 그들이 당신을 화나게 했다면, 그건 아마도 당신이 그들에게 충분한 시간을 주지 않았기 때문일 것이다.

말이 아닌 행동을 보아라. “시간이 오래 걸리긴 했지만 결국 깨달은 사실인데요. 여자에게 접근하는 남자들을 판단하는 방법은 아주 간단하답니다. 그들이 무슨 말을 하는지는 완전히 무시해버리고 오직 그들이 하는 행동만 집중해서 보면 되지요.”

만약 첫 번에 성공하지 못했다면 다시 시도해라. 진부한 말이지만.

클리셰들이 그토록 자주 반복되는 이유는 많은 경우 그 말들이 정곡을 찌르기 때문이라고 여겨진다.

너를 데리고 간 사람과 춤추어라. 비즈니스 세계에서나 학교에서나, 그리고 가정에서도 명심해야 할 진언이다. 이 말은 충성심과 감사하는 마음을 상기시킨다.

행운이란 준비가 기회를 만날 때 생기는 것이다. 앞으로 적어도 2000년은 더 반복할 만한 가치가 있다.

당신이 할 수 있다고 생각하든, 할 수 없다고 생각하든, 당신이 옳다.

그것 말고는, 링컨 부인, 연극은 어떠셨습니까? 내가 학생들에게 큰 문제를 제쳐두고 작은 문제들에 연연하지 말라는 뜻으로 자주 하는 말이다.

얼마나 세게 칠 것인가, 그것이 문제가 아니었다. 얼마나 센 주먹에 얻어터질 것인가 바로 그게 문제라는 것. 아무리 세게 맞았어도, 계속 앞으로 나아가야 한다.

경험이란 당신이 원하는 것을 얻지 못했을 때 얻어지는 것이다. 그리고 경험은 당신이 가진 것 중 가장 가치 있는 것이다.

사람들을 집중시켜라. 나는 그들의 주목을 끌어냈다. 관심을 집중시키는 것이야말로 지나치기 쉬운 문제를 푸는 첫 번째 단계였다.

감사의 마음을 표시하는 것은 인간들이 서로에게 할 수 있는 가장 간단하면서도 강력한 행위 중 하나다.

많은 사람들은 지름길을 원한다. 나는 최고의 지름길은 돌아가는 길이라 생각한다. 간단히 말해 묵묵히 최선을 다하라는 것이다.

“누군가 당신을 위해 했던 일을 당신도 다른 이들을 위해 하세요.”

당신이 준비한 것이 당신이 가진 전부다. 준비를 생활화하는 다른 방법은 모든 상황을 부정적으로 생각해보는 것이다. … 혹시 늑대에게 잡아먹힌다면?

누군가에게 사과를 할 때는 A학점이 아니면 모두 낙제라고. 사과를 받는 사람이 모욕을 느낄 수 있기 때문이다. 두가지의 전형적인 나쁜 사과의 예부터 설명했다. 1.”내가 한 일로 상처받게 해서 미안해.”(감정적인 위안을 주고자 하는 시도지만, 그 상처에 어떤 약도 바르고 싶지 않은 게 분명해 보인다.) 2.”내가 한 일에 대해 사과할게, 그렇지만 너도 네가 한 일에 대해 나에게 사과를 할 필요가 있어.”(이것은 사과를 하는게 아니다. 사과를 하라고 몰아붙이는 것이다.) 적절한 사과는 다음과 같은 세 가지를 포함하고 있다. 1.내가 한 일은 잘못됐어. 2.너에게 상처를 준 점 미안하게 생각해. 3.내가 어떻게 하면 좋을까?

진실만을 말하라. 언제나. 당신은 나중에 그 사람들을 또 마주치게 될 것이고, 그들은 당신이 거짓말한 사실을 기억할 것이다. 그리고 그들은 다른 많은 사람들에게 당신에 대해 이야기할 것이다. 그것이 바로 거짓의 놀라운 점이다.

“이건 나에 비해 너무나 하찮은 일이어서 우편물 분류 따위는 잘하고 싶지 않아.” 그 어떤 직업도 우리보다 하찮은 것은 없다. 그리고 만약 당신이 우편물을 분리할 수 없다면(혹은 하지 않을 것이라면), 당신이 다른 일을 잘할 것이라는 보장은 어디에 있는가?

절대 포기하지 마라.

권리는 어딘가에서 주어지는 것이고, 그 어딘가는 바로 공동체다. 그 대신에 우리 모두는 공동체에 대한 의무가 있다. … 나는 이것을 상식이라 부른다.

가끔씩, 당신은 그저 물어보기만 하면 된다. 그것이 당신이 일생 동안 품어왔던 꿈을 이루는 길로 이끌 수도 있다. 궁금한 것이 있다면 질문하라. 그저 묻기만 하면 된다. 당신이 기대하는 것보다 자주 당신이 듣게 될 대답은, “물론이죠.”가 될 것이다.

결정적으로 중요한 것은 나와 아이들을 연결하는 특별하면서도 구체적인 이야기들이라고 말했다.

첫번째 헤드페이크, 이 강의는 어떻게 당신의 꿈을 달성하느냐에 관한 것이 아닙니다. 이 강의는 어떻게 당신의 인생을 이끌어갈 것이냐에 대한 것입니다. 만약 당신이 인생을 올바른 방식으로 이끌어 간다면, 그 다음은 자연스럽게 운명이 해결해 줄 것이고 꿈이 당신을 찾아갈 것입니다.”
 
두번째 헤드페이크, 이 강의는 내 아이들을 위한 것입니다.

랜디 포시 – 마지막 강의

2007년인지 2008년인지 헷갈리지만, 학교에서 듣던 최형기 교수님 수업에서 랜디 포시 교수의 마지막 강의의 동영상을 찾아서 듣고, 감상문을 작성하라는 리포트를 내주셨던 적이 있다. 그 때의 난 좋은 뜻의 숙제란 것을 알면서도 다른 바쁜 일이 많다는 핑계로 적당히 적당히 써서 내었다. 며칠전 회사 도서관을 갔다가 우연히 “마지막 강의” 책을 보게 되었고 그 때가 생각나서 이제라도 읽어봐야겠다고 생각해 빌려왔는데 내용을 보니 강의 후 쓴 것이었다.
그래서 동영상들을 찾아보았는데 원어로 듣기에는 내 어학 능력이 미천한지라.. 좀 더 찾아보니 아마도 번역된 DVD가 나온 모양이다. 번역 동영상이 이상하게도 잘 찾아지지 않길래 링크를 남겨둔다.

랜디포시 의 마지막 강의 DVD 한글자막 풀버전 No.1
랜디포시 의 마지막 강의 DVD 한글자막 풀버전 No.2
랜디포시 의 마지막 강의 DVD 한글자막 풀버전 No.3
랜디포시 의 마지막 강의 DVD 한글자막 풀버전 No.4
랜디포시 의 마지막 강의 DVD 한글자막 풀버전 No.5

오프라 윈프리 쇼의 랜디 포시

잠깐 볼까 생각하고 보다 빠져들고보니 새벽 3시가 넘었다. 관심가는 분은 꼭 한번들 보시길..
보고 난 후, 읽고 난 후 느꼈던 것들과 새겨두고 싶은 것들은 따로 나중에 정리하여야 할 듯 하다.
지도교수였던 최형기 교수님이 정말 감사하다.

Vimdiff 사용법

linux에서 (거의) 기본적으로 제공하는 vim 을 이용하면 diff 툴을 사용할 수 있다.
vimdiff 로 실행가능하고 vim 에서 -d 옵션을 사용해서 사용할 수도 있다.

간단한 사용법은 다음을 참고하자.
http://amjith.blogspot.com/2007/07/visual-diff-tools-in-linux.html

정리하면,
do – 다른 윈도우의 변경 사항을 현재 윈도우로 가져오기
dp – 현재 윈도우의 변경 사항을 다른 윈도우로 넣기
]c – 다음 변경 사항으로 이동
[c – 이전 변경 사항으로 이동
Ctrl W + Ctrl W – 다른 윈도우로 이동

다른 윈도우로 이동할 때는 Ctrl + W <방향키> 를 이용할 수도 있다.

git와 SVN 간의 비교를 통한 이해

이전에 사용하던 것과 다른 SCM 도구를 사용할 때 항상 용어와 개념의 차이 때문에 애를 먹는다.
난 SVN이 익숙한데, GIT를 사용하려니 애를 먹는다. 이럴 때 볼만한 좋은 글.

If you are just after tracking someone else’s project, this get you started quickly:

git clone url
git pull
svn checkout url
svn update

글의 거의 맨 처음에 나온 저 글 하나로 이 글이 어떤 글인지 알 수 있을 듯 하다.

Linux Kernel Reference Site

커널에 관련해서 소스를 뒤지거나 Kernel Tree 안의 Documents들을 참조하는 일이 잦아졌다. 내 피씨(의 하드디스크)가 매우 느린 관계로 I/O 부하를 좀 줄이고자 웹사이트를 자주 뒤지는 편이다. 다음 두 개가 좀 편하다. 다른 건 나중에 추가!

Kernel Source : http://lxr.linux.no
Kernel Documents : http://www.mjmwired.net/kernel/Documentation/




Kernel의 Booting Parameter 넘기는 부분을 알고 싶어서 본 글



register_chrdrv()를 리눅스 커널 2.6 버전용으로 바꾸기

Linux Device Driver 중 Character device 의 코드를 보면 기존의 2.6 기준으로 수정되지 않은 코드들은 register_chrdrv() 함수를 사용하여 Character device를 등록하도록 되어 있다. register_chrdrv 함수의 원형은 다음과 같다.

int register_chrdev(unsigned int major, const char *name,
      const struct file_operations *fops)

그러나 2.6의 디바이스 드라이버들은 이와 다른 방식을 사용한다. register_chrdrv를 사용하는 방식은 Linux device driver 개정 3판을 보면 3장의 “예전 방식”이라는 부분에서 이를 다룬다. 예전 방식이 아닌 새로운 방식으로 작성하려면 register_chrdev 대신 register_chrdrv_region/alloc_chrdev_region 과 cdev_init, cdev_add 로 작성하면 된다.

register_chrdrv_region 함수는 원하는 디바이스의 번호를 미리 알고 있을 때 사용하고, alloc_chrdev_region 함수는 디바이스의 번호를 동적으로 할당받아 파라미터로 받는 dev_t 구조체 포인터를 이용해 dev_t 구조체에 넣는다.
register_chrdrv 대신 register_chrdrv_region을 사용하는 것으로 혼동할 수 있는데 그게 아닌 cdev_add 함수까지 사용하여야 한다. 실제 커널 소스의 register_chrdrv 함수를 보면 이런 과정이 구현되어 있음을 볼 수 있다.
cdev_add 함수를 사용하기 위해서는 struct cdev 구조체를 사용하여야 하는데 이 구조체를 초기화 시켜주는 함수가 cdev_init 이다. struct cdev 구조체 등을 사용하려면 <linux/cdev.h> 를 include하여야 한다. 다음은 사용 예이다.

#include <linux/kernel.h>
#include <linux/cdev.h>
#include <linux/fs.h>


struct file_operations dasom_fops;


static struct cdev dasom_cdev = {
    .owner = THIS_MODULE,
    .ops = &dasom_fops,

};


int _init dasom_init(void)
{
    dev_t dev;
    int err = 0;


    if(major) {
        dev = MKDEV(major, minor);
        err = register_chrdev_region(dev, 1, “dasomoli”);
    } else {
        err = alloc_chrdev_region(&dev, mior, 1, “dasomoli”);
        major = MAJOR(dev); 
    }
    if(err < 0) {
        err = -ENODEV;
        return err;
    }

    …
   
    cdev_init(&dasom_cdev, &dasom_fops);
    dasom_cdev.owner = THIS_MODULE;
    dasom_cdev.ops  = &dasom_fops;


    if(cdev_add(&dasom_cdev, dev, 1)) {
        printk(KERN_INFO”dasom: cdev creation failed.\n”);
        err = -ENODEV;
        goto error_label;
    }
   
    …
   
    return 0;
   
error_label:
    return err;
}

 

Linux Kernel 의 Memory barrier 구현

Linux Kernel의 프로세스 상태 변경 매크로(set_task_state, set_current_state)를 살펴보다가 ARM 아키텍처에서 다음과 같이 구현된 것을 보았다.

include/linux/sched.h

#define set_task_state(tsk, state_value)        \
    set_mb((tsk)->state, (state_value))
#define set_current_state(state_value)        \
    set_mb(current->state, (state_value))

set_mb 매크로는 시스템마다 다르게 구현되어 있는데 ARM 쪽을 따라가보면 다음과 같이 쓰여져 있다.

arch/arm/include/asm/system.h

#define dmb() __asm__ __volatile__ (“” : : : “memory”)

#define smp_mb()    dmb()

#define set_mb(var, value)    do { var = value; smp_mb(); } while (0)

do-while-0 구문에 대해서는 이 글을 참고하도록 하고, memory barrier에 대해서는 이 글을 참고하라. dmb() 의 inline assembly의 구조와 설명은 이 글을 참고하자.

참고된 글을 정리하자면, 명령이 R, W, R, W, R, W 순으로 사용된다면, 이를 하드웨어 혹은 소프트웨어 적으로 R, R, R, W, W, W 순으로 배열하는 등의 최적화를 할 수 있는데, 이 때 명령의 순서를 보장해 주는 역할로써 Memory barrier 라는 것을 구현해서 사용한다. 이는 하드웨어적으로 혹은 소프트웨어적으로 구현되는데 하드웨어적인 방법은 CPU 자체의 명령으로 구현되는 등의 방법이 사용될 수 있고, 소프트웨어적으로 구현될 때 위와 같이 구현될 수 있다.
위 구문은 gcc inline assembly의 확장으로 clobber list에 “memory”를 적어넣어 해당 명령(“” – 아무 명령도 수행하지 않음)을 수행한 후에 변경되는 것이 메모리 타입 저장장치(모든 레지스터, 모든 플래그, 모든 메모리)임을 나타낸다. gcc는 이럴경우 __asm__ __volatile__(“”: : :”memory”) 경계를 넘어가는 최적화 또는 instruction scheduling을 수행하지 않기 때문에 __asm__ __volatile__(“”: : :”memory”)를 사용하면 이전 코드의 수행 완료를 보장할 수 있고 이후 코드가 __asm__ __volatile__(“”: : :”memory”) 이전에 수행되는것을 방지 할수 있다. 별개로 volatile의 경우 읽기 연산에서 메모리에서 한번 읽어온 데이터를 레지스터에 저장해서 사용하는 것이 아닌 사용할 때마다 메모리 참조를 통해 가져오도록 한다.

음악 검색!

요즘 MP3 듣는 일이 없어서 어떻게 검색하나 했더니 구글에서

1. 국산 외 : 앨범 + torrent 붙여 검색
2. “intitle:index of mp3 소녀시대” 같은 식

으로 가능하단다..
뭐 별일 없으면 사자. 요즘은 태그까지 잘 정리해서 적당한 가격에 파는 듯.