기초는 중요하다.
1. boolean bool = true;
2. if(bool = false) {
3. System.out.println("a");
4. } else if (bool) {
5. System.out.println("c");
6. } else if (!bool) {
7. System.out.println("c");
8. } else {
9. System.out.println("d");
10. }
What is the result?
A. a
B. b
C. c
D. d
E. Compilation fails.
씨. 2번 라인의 경우 앞의 값과 관계없이 대입값이 false 면 false,
대입값이 true면 true
Which statement is true?
A. catch(X x) can catch subclasses of X.
B. The Error class is a RuntimeException.
C. Any statement that can throw an Error must be enclosed in a try block.
D. Any statement that can throw an Exception must be enclosed in a try block.
E. Any statement that can throw a RuntimeException must be enclosed in a try block.
답 : 에이
B : Error 클래스가 있고 그거임.
C : ERROR는 싸도 안됨
D,E : throws가 있잖아.
throws throws 문은 예외를 현재 메소드에 처리하지 않고 상위로 올려 보낸다. 최상위 메소드로 전파가 되었는데도 예외를 처리하지 않으면 Exception 발생.
Which statement is true about assertion in the Java programming language?
A. Assertion expressions should not contain side effects.
B. Assertion expression values can be any primitive type.
C. Assertion should be used for enforcing preconditions on public methods.
D. An AssertionError thrown as a result of a failed assertion should always be handled by the enclosing method.
B. 조건문과 String으로 제한
C. public method에서만 사용할 강제 조건 없음 암때나 사용해도됨.
D. 에러 내고 종료하는게 assert의 본 목적
2011년 2월 25일 금요일
2011년 2월 24일 목요일
C] 다른 언어도 많다.
http://groups.engin.umd.umich.edu/CIS/course.des/cis400/index.html
하지만 C가 이름이 가장 짧다.
하지만 C가 이름이 가장 짧다.
c] C를 그냥 언어로 보자. but
C언어가 인터프리터인가 컴파일 언어인가 하는 질문은 종결된지 오래다.
하지만...
http://root.cern.ch/drupal/content/cint
에서 windows용 cint를 받아서 실행해보면 인터프리터 언어일수도 있다고 생각된다.
{ } 를 잘 쓰면 길게 입력한 구문을 실행시켜 볼 수도 있다.
그래봤자. printf랑 대입문이 대부분이지만. 교육용으론느 좋을 듯.
이제 C 언어는 컴파일러와 별개로 생각해야 할 것 같다.
어느 회사께 더 좋다고 생각하지는 말자.
고 할 줄 알았낭...
but 엔지니어는 빨라야 하고 이 컴파일러에서 안된다고 앉아서 욕만 하고 있을수만도 없다.
그리고 전문가는 한가지를 잘하기 위해 다른 것을 포기한 사람이다.
이래저래 다 하다보면 다 잘하는 줄 알지만 결국 약해지기 마련.
무엇을 선택하겠는가...
한국에서 태어났다면 오픈소스다.
gcc
하지만...
http://root.cern.ch/drupal/content/cint
에서 windows용 cint를 받아서 실행해보면 인터프리터 언어일수도 있다고 생각된다.
{ } 를 잘 쓰면 길게 입력한 구문을 실행시켜 볼 수도 있다.
그래봤자. printf랑 대입문이 대부분이지만. 교육용으론느 좋을 듯.
이제 C 언어는 컴파일러와 별개로 생각해야 할 것 같다.
어느 회사께 더 좋다고 생각하지는 말자.
고 할 줄 알았낭...
but 엔지니어는 빨라야 하고 이 컴파일러에서 안된다고 앉아서 욕만 하고 있을수만도 없다.
그리고 전문가는 한가지를 잘하기 위해 다른 것을 포기한 사람이다.
이래저래 다 하다보면 다 잘하는 줄 알지만 결국 약해지기 마련.
무엇을 선택하겠는가...
한국에서 태어났다면 오픈소스다.
gcc
JAVA JAVA... 잡아
1. package foo;
2.
3. import java.util.Vector;
4.
5. private class MyVector extends Vector {
6. int i = 1;
7. public MyVector() {
8. i = 2;
9. }
10. }
11.
12. public class MyNewVector extends MyVector {
13. public MyNewVector() {
14. i = 4;
15. }
16. public static void main(String args[]) {
17. MyVector v = new MyNewVector();
18. }
19. }
What is the result?
A. Compilation succeeds.
B. Compilation fails because of an error at line 5.
C. Compilation fails because of an error at line 6.
D. Compilation fails because of an error at line 14.
E. Compilation fails because of an error at line 17.
비 : 생성자는 클래스의 접근제한자와 일치해야함.
1. class TestSuper {
2. TestSuper(int i) { }
3. }
4. class TestSub extends TestSuper{ }
5. class TestAll {
6. public static void main (String [] args) {
7. new TestSub();
8. }
9. }
Which is true?
A. Compilation fails.
B. The code runs without exception.
C. An exception is thrown at line 7.
D. An exception is thrown at line 2.
컴파일 에러. 생성자가 없을 때는 부모의 디폴트 생성자를 호출하는데 인자가 있는 생성자 만 있기에.
10. int i = 0;
11. for (; i <4; i += 2) {
12. System.out.print(i + "");
13. }
14. System.out.println(i);
What is the result?
A. 0 2 4
B. 0 2 4 5
C. 0 1 2 3 4
D. Compilation fails.
E. An exception is thrown at runtime.
0, 2 찍고 후처리로 4 되었을 때 이탈하게 된다.
그리고 4를 찍고 종료.
2.
3. import java.util.Vector;
4.
5. private class MyVector extends Vector {
6. int i = 1;
7. public MyVector() {
8. i = 2;
9. }
10. }
11.
12. public class MyNewVector extends MyVector {
13. public MyNewVector() {
14. i = 4;
15. }
16. public static void main(String args[]) {
17. MyVector v = new MyNewVector();
18. }
19. }
What is the result?
A. Compilation succeeds.
B. Compilation fails because of an error at line 5.
C. Compilation fails because of an error at line 6.
D. Compilation fails because of an error at line 14.
E. Compilation fails because of an error at line 17.
비 : 생성자는 클래스의 접근제한자와 일치해야함.
1. class TestSuper {
2. TestSuper(int i) { }
3. }
4. class TestSub extends TestSuper{ }
5. class TestAll {
6. public static void main (String [] args) {
7. new TestSub();
8. }
9. }
Which is true?
A. Compilation fails.
B. The code runs without exception.
C. An exception is thrown at line 7.
D. An exception is thrown at line 2.
컴파일 에러. 생성자가 없을 때는 부모의 디폴트 생성자를 호출하는데 인자가 있는 생성자 만 있기에.
10. int i = 0;
11. for (; i <4; i += 2) {
12. System.out.print(i + "");
13. }
14. System.out.println(i);
What is the result?
A. 0 2 4
B. 0 2 4 5
C. 0 1 2 3 4
D. Compilation fails.
E. An exception is thrown at runtime.
0, 2 찍고 후처리로 4 되었을 때 이탈하게 된다.
그리고 4를 찍고 종료.
소스 파일 구성
□ 하나의 파일에는 하나의 클래스가 작성되며 따라서 둘 이상의 클래스가 선언될 수 있다. 둘 이상의 클래스를 선언할 때는 public제한자로 선언된 클래스의 이름이 파일 이름이 되어야 하고, 만약 public클래스가 존재하지 않을 때는 어느 클래스의 이름도 파일 이름이 될 수 있다. 이미 만들어져 있는 클래스를 사용하기 위한 import문과 작성된 클래스를 패키지로 관리하기 위한 package문이 선언될 수 있음.
□ 주석 : 프로그램의 흐름에는 영향을 주지 않으면서 소스 코드의 분석을 용이하게 해주는 문장
① 문서화 주석 : 자바 도큐먼트를 만들기 위해서 정의된 주석으로서 문서화 주석으로 선언된 내용을 도큐먼트 도구로 뽑아내어 KAVA API와 같은 HTML페이지를 만들 수 있음
② 라인 주석 : 단일 문장을 주석처리하기 위해 사용
③ 블록 주석 : 여러 라인의 문장을 주석처리하기 위해 사용. 한 줄 이상의 문장을 주석처리하기 위해 사용되며 소스 코드 상에 부가적인 설명이 많이 필요한 경우에 주로 사용. 더 이상 사용되지 않는 메소드를 주석처리하기 위해 사용
□ Package : 클래스를 모아두는 창고와 같은 것으로서 작성된 클래스들을 패키지로 묶기 위해서는 클래스 파일의 앞부분에 package를 선언하고 해당 클래스들을 선언된 패키지 이름과 같은 폴더에 추가. 패키지 이름은 전 세계에서 유일할 수 있도록 도메인 네임을 거꾸로 하여 작성하는 것이 관례. 하지만 꼭 지켜야 할 필요는 없음
□ Import : 이미 작성되어 있는 클래스들을 사용하기 위해서 선언하는 문장. import 선언하고 뒤에 사용하고자 하는 클래스 명을 패키지 명과 함께 선언하면 됨.
□ Class : 객체의 청사진으로서 속성과 행동을 표현하기 위한 변수와 메소드로 구성.
C에 대한 노트.
32767 까지 인가 32768까지 이던가...
typedef int (*p)(void);
void는 쓰나 안쓰나 같겠지?
p func(void)
{
p fp=abc;
return p;
}
이것이 함수 포인터 인가...
int func(int a, int b)
int (*p)(int, int);
func(10,20) 이나
(*p)(10,20)이나.
메모리는 Runtime 때만 allocation이 된데.
심볼은 주소를 가지고 있는 것들....
함수 안의 local variable은 Runctime of func...
전역 변수는 초기화 하지 않는 것이 낫나?
스택에서 겹치는 경영은 base의 것
*(unsigned int)dst++ = *(UI) p++;
이라고 명시하는게 빠르다?
*dst++=*p++; 보다는. 도대체 왜?
배열명은 주소값 자체다. 이것.. 뭐 누구나 아는 사실.
int (*p)(void) = func;
함수 포인터 기본형.
함수 주소를 알면?
( ( (int (*)(void) )0x40100A) ) (); 요걸로 실행가능.
(*p)[] 배열 포인터
*p[] 포인터 배열
int p[1000]이 int *p로 보인다~~
P.S masm 6.14이후버전부터 if, while, repeat가 들어갔음.
C] 실수는 오차가 난다.
5.625를 메모리에 저장한다고 치자.
2진수로 변환하면
일단 5 부터 = 2로 슝슝 나누어서 나머지 역으로 보면 101이 나온다.
아니면 1 2 4 8 로 자리수가 나가니까
1 4 만 켜주면 되니까 101
0.625는 2를 곱해서 정수가 되는 넘만 적는다.
0.625*2 = 1.250
0.250*2 = 0.500
0.500*2 = 1
정수자리면 보면 101
그래서
101.101이 된다.
지수형태로 나타나면 .을 앞으로 땡기고
1.01101 * 2 * 2
가 된다. 뭐 2진수에 2자리 앞으로 땡겼으니까.
메모리 저장할 때는
부호부(sign bit) 1 bit
지수부(exponent bit) 8 bits
가수부(mantissa bits) 23bits
유효자리수(precision) 6~7
로 구성된다.
float 일 때, double일 때는 1, 11, 52, 15~16 이다.
위에서 지수부는 2*2 에서 2 이다. 앞에 2는 2진수를 뜻하고 뒤에 2가 가수부니까.
거기다가 127을 더한다. 이유는 음/양을 구분해야 하는데
8비트 전부 1을 써 넣으면 11111111 = 255 이기 때문에 중간값인 127을 넣는 것이다.
즉 127은 0을 뜻한다. 127+2 하니까 2가 되고 만약 127을 보다 낮은 값이면 음수란 거다.
지수부가 음수란 뜻이쥥... -> 점(.) 찍는 곳이 좌측이 아니라 우측으로 간다는 소리.
double형은 1023을 더한다.
가수부에 소수점 자리가 저장된다.
01101이 저장되겠지. 0.625 는 깔끔하지만 2를 계속 곱해도 안끝나는 녀석이 생기게 나름이다.
그래서 실수는 오차가 난다.(결론)
2진수로 변환하면
일단 5 부터 = 2로 슝슝 나누어서 나머지 역으로 보면 101이 나온다.
아니면 1 2 4 8 로 자리수가 나가니까
1 4 만 켜주면 되니까 101
0.625는 2를 곱해서 정수가 되는 넘만 적는다.
0.625*2 = 1.250
0.250*2 = 0.500
0.500*2 = 1
정수자리면 보면 101
그래서
101.101이 된다.
지수형태로 나타나면 .을 앞으로 땡기고
1.01101 * 2 * 2
가 된다. 뭐 2진수에 2자리 앞으로 땡겼으니까.
메모리 저장할 때는
부호부(sign bit) 1 bit
지수부(exponent bit) 8 bits
가수부(mantissa bits) 23bits
유효자리수(precision) 6~7
로 구성된다.
float 일 때, double일 때는 1, 11, 52, 15~16 이다.
위에서 지수부는 2*2 에서 2 이다. 앞에 2는 2진수를 뜻하고 뒤에 2가 가수부니까.
거기다가 127을 더한다. 이유는 음/양을 구분해야 하는데
8비트 전부 1을 써 넣으면 11111111 = 255 이기 때문에 중간값인 127을 넣는 것이다.
즉 127은 0을 뜻한다. 127+2 하니까 2가 되고 만약 127을 보다 낮은 값이면 음수란 거다.
지수부가 음수란 뜻이쥥... -> 점(.) 찍는 곳이 좌측이 아니라 우측으로 간다는 소리.
double형은 1023을 더한다.
가수부에 소수점 자리가 저장된다.
01101이 저장되겠지. 0.625 는 깔끔하지만 2를 계속 곱해도 안끝나는 녀석이 생기게 나름이다.
그래서 실수는 오차가 난다.(결론)
2011년 2월 23일 수요일
C] 도대체 왜... 주소가 안 나올까?
#include <stdio.h>
typedef unsigned int UI;
void main(void)
{
float a = 3.25;
double b = 3.25;
printf("%X=%f\n", *(UI *)&a, a);
printf("%X:%X=%f\n", *((UI *)&b +1), *((UI *)&b), b);
}
typedef unsigned int UI;
void main(void)
{
float a = 3.25;
double b = 3.25;
printf("%X=%f\n", *(UI *)&a, a);
printf("%X:%X=%f\n", *((UI *)&b +1), *((UI *)&b), b);
}
라이프] 어머니께 꼭 보여드려야할 컴퓨터.
1. 인터넷 쇼핑
2. 구글 어스
3. 인터넷 고스톱
4. 네이버 항공뷰
5. 간단히 할 수 있는 3D게임.
6. 뉴스 댓글. 댓글 달기도.
7. 채팅, 세이클럽 같은.
꼭 보여 드리자~
2. 구글 어스
3. 인터넷 고스톱
4. 네이버 항공뷰
5. 간단히 할 수 있는 3D게임.
6. 뉴스 댓글. 댓글 달기도.
7. 채팅, 세이클럽 같은.
꼭 보여 드리자~
basic problems
Which statement is true?
A. Assertions can be enabled or disabled on a class-by-class basis.
B. Conditional compilation is used to allow tested classes to run at full speed.
C. Assertions are appropriate for checking the validity of arguments in a method.
D. The programmer can choose to execute a return statement or to throw an exception if an assertion fails.
A. 정답
B. 먼솔?
C. 파라미터만 체크하는거 아니지.
D. 그건 try catch... 어썰션은 에러를 내고 로그 출력 형태임.
You want a class to have access to members of another class in the same package. Which is the most restrictive access that accomplishes this objective?
A. public
B. private
C. protected
D. transient
E. default access
A. Assertions can be enabled or disabled on a class-by-class basis.
B. Conditional compilation is used to allow tested classes to run at full speed.
C. Assertions are appropriate for checking the validity of arguments in a method.
D. The programmer can choose to execute a return statement or to throw an exception if an assertion fails.
A. 정답
B. 먼솔?
C. 파라미터만 체크하는거 아니지.
D. 그건 try catch... 어썰션은 에러를 내고 로그 출력 형태임.
You want a class to have access to members of another class in the same package. Which is the most restrictive access that accomplishes this objective?
A. public
B. private
C. protected
D. transient
E. default access
디폴트로 하면 같은 패키지 내에서 가능... private이 가장 제한적이지만 클래스 내에서만 접근 가능.
linux] 리눅스 관련 사이트
http://lxr.linux.no/
리눅스 0.01을 볼 수 있다.
아래는 필수 유틸즈.
http://www.gnu.org/software/coreutils/manual/
http://unxutils.sourceforge.net/
리눅스 0.01을 볼 수 있다.
아래는 필수 유틸즈.
http://www.gnu.org/software/coreutils/manual/
http://unxutils.sourceforge.net/
라이프] 피부관리
어릴적부터 서른이 될 때까지 피부 좋다는 칭찬은 항상 들었다. 최소 하루 두번 이상은...
그래서 서른이 되어 나에게 선물을 줬다. 피부과 가서 200만원 쓴 것.
.
정말 깨끗한 피부였지만 관리가 끝나고 지금은 검버섯이 하루가 다르게
늘고 있다.
이제 피부가 좋을 필요성을 못 느끼게 되었다.
나와 앞으로 같이 살 사람을 찾은 것도 있고,
뭔가하고 싶은게 있어서 하루 4시간 정도 잠을 자기 때문에
이제 좋아질 수는 없고 급속도로 나빠질 것이다.
남자로 태어나서 다행이다.
F1 레이싱의 강하고 뜨거운 심장이 기이한 모습도 멋지게 보이듯.
내 영혼도 그렇게 성장하길 바란다.
그래서 서른이 되어 나에게 선물을 줬다. 피부과 가서 200만원 쓴 것.
.
정말 깨끗한 피부였지만 관리가 끝나고 지금은 검버섯이 하루가 다르게
늘고 있다.
이제 피부가 좋을 필요성을 못 느끼게 되었다.
나와 앞으로 같이 살 사람을 찾은 것도 있고,
뭔가하고 싶은게 있어서 하루 4시간 정도 잠을 자기 때문에
이제 좋아질 수는 없고 급속도로 나빠질 것이다.
남자로 태어나서 다행이다.
F1 레이싱의 강하고 뜨거운 심장이 기이한 모습도 멋지게 보이듯.
내 영혼도 그렇게 성장하길 바란다.
2011년 2월 21일 월요일
IPC 소스는 도대체 어디에 있을까...
휴대폰 소스 폴더에서 du -sh ./ 해보면 5.5G라고 나온다.
ㅡㅡ; 텍스트만 5.5기가다.
참... 430Mb 하드디스크를 100만원 주고 샀을때가 엊그제 같은데 세상 빨리 돌아간다.
믓튼... IPC가 어딘지 찾으려고 하면 삼만리다.
우선 안드로이드 책 보고 프레임 워크 보고 대충 이정도 있겠구나 하고 폴더 이름보고
찾아 들어 가는게 첫번째 방법이요.
소스를 통째로 분석해서 파트를 구분짓는게 두번째 방법이다.
제일 간단한 방법은 물어 보는 거다.
물어보기 그러면 사내 커뮤니티를 찾아서 검색해 보거나 블로깅 하는 사람을 찾는 것이다.
물어보면 참 대충 가르쳐 준다.
적자 적어. 드르브도 그게 사는 길이다.
ㅡㅡ; 텍스트만 5.5기가다.
참... 430Mb 하드디스크를 100만원 주고 샀을때가 엊그제 같은데 세상 빨리 돌아간다.
믓튼... IPC가 어딘지 찾으려고 하면 삼만리다.
우선 안드로이드 책 보고 프레임 워크 보고 대충 이정도 있겠구나 하고 폴더 이름보고
찾아 들어 가는게 첫번째 방법이요.
소스를 통째로 분석해서 파트를 구분짓는게 두번째 방법이다.
제일 간단한 방법은 물어 보는 거다.
물어보기 그러면 사내 커뮤니티를 찾아서 검색해 보거나 블로깅 하는 사람을 찾는 것이다.
물어보면 참 대충 가르쳐 준다.
적자 적어. 드르브도 그게 사는 길이다.
휴대폰에서 IPC
휴대폰에서 IPC는 리눅스의 IPC와는 개념이 조금 다르다.
Inter Process가 아니라.
Inter Processor Control이다.
전화를 하기 위해서는 모뎀칩이 들어가는데 그 모뎀칩에도 나름의 소프트웨어가 있고
소스 트리는 따로 있다.
즉, 모뎀칩에만 들어가는 소프트웨어는 따로 컴파일 되어서 모뎀칩에 올라간다.
우린 CDMA 파트이기 때문에 QSC6075와 같은 퀄컴껄 쓴다.
실재적으로 TV에서 광고하는 듀얼코어니 ARM이니 하는 것들이 휴대폰에서는
main이 된다(전화는 못하지만 main부분이 휴대폰을 제어할 권할을 가진다)
그리고 IPC라는 것은 그 main이 되는 부분의 memory파트(일반적인 RAM이지만 휴대폰 에서는 dpram이나 onedram을 쓴다) 랑 통신하는 부분이 IPC 파트인 것이다.
그런데 실재적으로 두 칩 사이에도 여러 소프트웨어 레이어 계층이 있어서
프레임 워크, RIL단 등으로 나누기도 하는데.
실재적으로 모두 모르고 엔지니어만 나누기 때문에 결국은 다 알아야
컨트롤이 가능하다.(우수한 관리자가 되려면)
Inter Process가 아니라.
Inter Processor Control이다.
전화를 하기 위해서는 모뎀칩이 들어가는데 그 모뎀칩에도 나름의 소프트웨어가 있고
소스 트리는 따로 있다.
즉, 모뎀칩에만 들어가는 소프트웨어는 따로 컴파일 되어서 모뎀칩에 올라간다.
우린 CDMA 파트이기 때문에 QSC6075와 같은 퀄컴껄 쓴다.
실재적으로 TV에서 광고하는 듀얼코어니 ARM이니 하는 것들이 휴대폰에서는
main이 된다(전화는 못하지만 main부분이 휴대폰을 제어할 권할을 가진다)
그리고 IPC라는 것은 그 main이 되는 부분의 memory파트(일반적인 RAM이지만 휴대폰 에서는 dpram이나 onedram을 쓴다) 랑 통신하는 부분이 IPC 파트인 것이다.
그런데 실재적으로 두 칩 사이에도 여러 소프트웨어 레이어 계층이 있어서
프레임 워크, RIL단 등으로 나누기도 하는데.
실재적으로 모두 모르고 엔지니어만 나누기 때문에 결국은 다 알아야
컨트롤이 가능하다.(우수한 관리자가 되려면)
내가 하는 일.
이곳은 개인 블로그고 내가 하는 것들을 적어서
내가 싫어하는 종족타입의 부류들이 다른 사람들이 마음대로 평가하는
광장으로 삼고 싶지는 않으나...
혹 궁금해 하는 사람들을 위해서 몇자 적자면.
휴대폰 S/W를 만드는 일을 하고 있다.
관련 일의 구분이 그리 체계적이지 않은 곳에서.
그래서 결론은 이것저것 다 하자는 것.
하나를 파진 못하지만. 학문적인 것 보다. 여자친구랑 데이트 하는데에
더 신경을 쓰는 낭만 엔지니어니까 괜찮아.
내가 싫어하는 종족타입의 부류들이 다른 사람들이 마음대로 평가하는
광장으로 삼고 싶지는 않으나...
혹 궁금해 하는 사람들을 위해서 몇자 적자면.
휴대폰 S/W를 만드는 일을 하고 있다.
관련 일의 구분이 그리 체계적이지 않은 곳에서.
그래서 결론은 이것저것 다 하자는 것.
하나를 파진 못하지만. 학문적인 것 보다. 여자친구랑 데이트 하는데에
더 신경을 쓰는 낭만 엔지니어니까 괜찮아.
IPC와 FileSystem... 리버스 엔지니어링.
맡았다고 해도 누군가 세미나를 해주거나 가르쳐 주는 건 없다.
이유야 간단하다. IT 분야는 잘한다고 해도 주변 곳곳에 제갈량이 숨어 있으며
우리나라 세미나 문화는 잘하는 사람이 가르쳐 주는게 아니라.
못하는 사람 세미나 시켜놓고 갈구는 것이 일반적이기 때문이다.
좀 드릅다.
그래서 리버스 엔지니어링이란 것을 좋아하게 되었고.
내 나름 대로는 리버스 엔지니어가 되는 것이 꿈이다. 물론, 시스템 경영도 포함해서
즉, 개발자 이지만 관리자 이기도 한.
다만 다른 것은 뛰어난 엔지니어링 지식이 있는 관리자는 팀을 이끈다.
그리고 불만이 없도록 한다.
이것이 리더십.
서두가 길었군.
리버싱도 별거 아니다. 뭐 보통은 파일 리버싱을 말하는데
파일 리버싱만 해도 엄청 많은 지식이 요구된다. 그런데 왜 별거 아닐까?
재미있기 때문이다.
실재로 리버싱은 재미있다.
그럼. 내가 생각하는 세계를 조금은 적어볼까 한다.
리버싱이란 이런 것이다.
우선 나에게 IPC랑 FileSystem이 왔다. 주변 정황을 먼저 보는 것이다.
IPC는 박사님이 하시는 거였고 FileSystem은 선임 엔지니어가 하는 부분이다.
그런데 한분은 팀을 떠나고 한분은 다른 파트를 하는 바람에 내가 이 파트를 맡게 되었따.
ㅡㅡ; 죽으라는 건가? 그리고 아무런 상담도 없었다.
다른 곳은 IPC를 위한 팀도 따로 있다. 그리고 파일 시스템을 위한 팀도.
결국 우리 팀은
상품화를 위한 팀으로 남겨지는 것이다.
그러면 내가 어떻게 해야할까? 문제가 나오면 최전방에서 썅욕을 들어야 하는데. 그런 썅욕의 표적지가 되는 것을 방관만 해야 하는가?
최고의 방법은 어리버리 까면서 인정 못받고 살아가는 것이다. 어차피 팀 분위기가 잘하나 못하나 욕 먹는 구조라서 어렵지 않다.
그래서 내가 택한 방법은? 잘하나 못하나 고생은 고생대로 하고 욕을 먹었기 때문에. 일단 안하는 것이다. 하지만 이미지는 잘하는 이미지를 심어 주는 것이다. 알고는 있지만 난 몰라요. 하지만 가끔은 표현하는 것.
그래서 회사 생활이 편해졌다. 어차피 컴퓨터 경력은 팀에서 나보다 오랜 사람은 없기 때문에 아는 것을 말하면 그것을 이용해서 혼이 난다.
그러기 위해서는 알아야 한다. 누군가가 가르쳐 주지 않아도.
이럴 때 필요한 것은 리버스 엔지니어링.
간단하다. 키워드를 찾고 검색을 하고 소스를 분석한다.
관련 소스도를 검색하다가 방법론이나 소프트웨어 구조가 나오면 그것을 공부한다.
가장 중요한 것은 보편적인 방법론을 공부하는 것이 아니라 소스가 되어야 한다는 것이다.
최대한 소스에 밀착해서 공부하는 것은 시간을 줄여준다.
그러면 팀을 위하는 사람이 되는 거겠지.
솔직히 가장 팀을 위하는 방법은 팀이 깨지도록 유지하는 것이다. 20명 남짓한 팀에 3명이 퇴사하고 2명이 팀을 옮기는 구조에서는 팀을 깨져서 유능한 엔지니어들이 각자 분야에서 클 수 있도록 도와주는 것이 내가 할 일이긴 하나.
회사 생활은 쉬운 것이 아니므로 IPC와 FileSystem을 분석하려고 한다.
고고쓍
이유야 간단하다. IT 분야는 잘한다고 해도 주변 곳곳에 제갈량이 숨어 있으며
우리나라 세미나 문화는 잘하는 사람이 가르쳐 주는게 아니라.
못하는 사람 세미나 시켜놓고 갈구는 것이 일반적이기 때문이다.
좀 드릅다.
그래서 리버스 엔지니어링이란 것을 좋아하게 되었고.
내 나름 대로는 리버스 엔지니어가 되는 것이 꿈이다. 물론, 시스템 경영도 포함해서
즉, 개발자 이지만 관리자 이기도 한.
다만 다른 것은 뛰어난 엔지니어링 지식이 있는 관리자는 팀을 이끈다.
그리고 불만이 없도록 한다.
이것이 리더십.
서두가 길었군.
리버싱도 별거 아니다. 뭐 보통은 파일 리버싱을 말하는데
파일 리버싱만 해도 엄청 많은 지식이 요구된다. 그런데 왜 별거 아닐까?
재미있기 때문이다.
실재로 리버싱은 재미있다.
그럼. 내가 생각하는 세계를 조금은 적어볼까 한다.
리버싱이란 이런 것이다.
우선 나에게 IPC랑 FileSystem이 왔다. 주변 정황을 먼저 보는 것이다.
IPC는 박사님이 하시는 거였고 FileSystem은 선임 엔지니어가 하는 부분이다.
그런데 한분은 팀을 떠나고 한분은 다른 파트를 하는 바람에 내가 이 파트를 맡게 되었따.
ㅡㅡ; 죽으라는 건가? 그리고 아무런 상담도 없었다.
다른 곳은 IPC를 위한 팀도 따로 있다. 그리고 파일 시스템을 위한 팀도.
결국 우리 팀은
상품화를 위한 팀으로 남겨지는 것이다.
그러면 내가 어떻게 해야할까? 문제가 나오면 최전방에서 썅욕을 들어야 하는데. 그런 썅욕의 표적지가 되는 것을 방관만 해야 하는가?
최고의 방법은 어리버리 까면서 인정 못받고 살아가는 것이다. 어차피 팀 분위기가 잘하나 못하나 욕 먹는 구조라서 어렵지 않다.
그래서 내가 택한 방법은? 잘하나 못하나 고생은 고생대로 하고 욕을 먹었기 때문에. 일단 안하는 것이다. 하지만 이미지는 잘하는 이미지를 심어 주는 것이다. 알고는 있지만 난 몰라요. 하지만 가끔은 표현하는 것.
그래서 회사 생활이 편해졌다. 어차피 컴퓨터 경력은 팀에서 나보다 오랜 사람은 없기 때문에 아는 것을 말하면 그것을 이용해서 혼이 난다.
그러기 위해서는 알아야 한다. 누군가가 가르쳐 주지 않아도.
이럴 때 필요한 것은 리버스 엔지니어링.
간단하다. 키워드를 찾고 검색을 하고 소스를 분석한다.
관련 소스도를 검색하다가 방법론이나 소프트웨어 구조가 나오면 그것을 공부한다.
가장 중요한 것은 보편적인 방법론을 공부하는 것이 아니라 소스가 되어야 한다는 것이다.
최대한 소스에 밀착해서 공부하는 것은 시간을 줄여준다.
그러면 팀을 위하는 사람이 되는 거겠지.
솔직히 가장 팀을 위하는 방법은 팀이 깨지도록 유지하는 것이다. 20명 남짓한 팀에 3명이 퇴사하고 2명이 팀을 옮기는 구조에서는 팀을 깨져서 유능한 엔지니어들이 각자 분야에서 클 수 있도록 도와주는 것이 내가 할 일이긴 하나.
회사 생활은 쉬운 것이 아니므로 IPC와 FileSystem을 분석하려고 한다.
고고쓍
IPC와 FileSystem...
어플을 하고 싶다고 아무리 어필해도...
결국 IPC와 fileSystem을 맡게 되었다.
삼성 소프트웨어 멤버십에 있을 때에는 하드웨어 단을 했다고 해야 하나...
뭐 대충 그런 류 였는데.
들어와서는 어플이 하고 싶었다.
이유는 간단하다. 결국엔 눈에 보이는 프로그래머가 인정 받는 다는거.
밑에 단이 더 중요하지만...
알아 줄 만한 관리자가 없다.
애쓍...
내가 되어야만 한다 ㅠ.ㅠ
아쓍. 된장 된장
아.. 된장국 먹고 싶다.
내가 끓인거... 열나 맛있는데.
귀찮아 ㅠㅠ
결국 IPC와 fileSystem을 맡게 되었다.
삼성 소프트웨어 멤버십에 있을 때에는 하드웨어 단을 했다고 해야 하나...
뭐 대충 그런 류 였는데.
들어와서는 어플이 하고 싶었다.
이유는 간단하다. 결국엔 눈에 보이는 프로그래머가 인정 받는 다는거.
밑에 단이 더 중요하지만...
알아 줄 만한 관리자가 없다.
애쓍...
내가 되어야만 한다 ㅠ.ㅠ
아쓍. 된장 된장
아.. 된장국 먹고 싶다.
내가 끓인거... 열나 맛있는데.
귀찮아 ㅠㅠ
리눅스 쓸 준비 끝내려면...
리눅스 하다가 짜증내는 사람들을 참 많이 보았다.
우분투, 수세, 레드헷, 페도라, 슬렉웨어, 카노픽스, 등등...
사실 패키지란 패키지는 다 깔아 보았는데...(그게 목표였으니...)
성질 안 난 적은 없었다.
하지만 그 때 어머님께 컴퓨터를 가르쳐 드리면서 Windows도 너무도 못 쓰시는 것을 보고
아... Windows에 익숙해져 있었던 것이지만 Windows가 편한 것은 아니구나... 했다.
그래서 아무런 이유없이 리눅스를 그냥 계속 썼고.
나중에는 리눅스 와인에서 스타를 돌릴 정도도 되었었다. 어떻게 했는지는 모르지만 여튼
마우스가 제대로 동작하지 않는 스타를 돌리고 네이트온을 돌리면서 뿌듯해 했던 기억이
난다.
그냥 ... 막 사용하면 그게 습관이 된다는 것이다.
C 언어도 그렇다. 논리적으로 안다기 보다는 쓰다보면 계속 하다보면 보인다는 것.
적어도 3개월은 계속 하다보면 뭔가가 보인다.
그 동안의 힘든 길은 인터넷 찾아보고
다른 사람들도 똑같은 과정을 겪었구나 하고 동질감을 느끼고,
해결했을 때 기쁨도 느끼면서 나가는 것이다.
우분투, 수세, 레드헷, 페도라, 슬렉웨어, 카노픽스, 등등...
사실 패키지란 패키지는 다 깔아 보았는데...(그게 목표였으니...)
성질 안 난 적은 없었다.
하지만 그 때 어머님께 컴퓨터를 가르쳐 드리면서 Windows도 너무도 못 쓰시는 것을 보고
아... Windows에 익숙해져 있었던 것이지만 Windows가 편한 것은 아니구나... 했다.
그래서 아무런 이유없이 리눅스를 그냥 계속 썼고.
나중에는 리눅스 와인에서 스타를 돌릴 정도도 되었었다. 어떻게 했는지는 모르지만 여튼
마우스가 제대로 동작하지 않는 스타를 돌리고 네이트온을 돌리면서 뿌듯해 했던 기억이
난다.
그냥 ... 막 사용하면 그게 습관이 된다는 것이다.
C 언어도 그렇다. 논리적으로 안다기 보다는 쓰다보면 계속 하다보면 보인다는 것.
적어도 3개월은 계속 하다보면 뭔가가 보인다.
그 동안의 힘든 길은 인터넷 찾아보고
다른 사람들도 똑같은 과정을 겪었구나 하고 동질감을 느끼고,
해결했을 때 기쁨도 느끼면서 나가는 것이다.
후배들에게...
기업에 왔지만 아직도 많은 이들이 리눅스를 하려면 뭘 해야 하는지 물어본다.
나도 딱히 잘하는 것은 없지만 그래도 오래 했으니까 추천해줄 것은 키워드 밖에 없다.
해당 키워드를 찾아서 그것이 패키지이든 운영체제든 유틸리티든 공부하라고 하고 싶다.
1. 우분투
우선 운영체제는 우분투. 오랜동안 레드햇만을 써왔지만 우분투가 대세라는 것을 말하고 싶다. 따지고 보면 신생도 아니다. DVD 미디어 갓 나왓을 때 데비안 패키지 꾸우니까 DVD12장 나왔었던 것 같다. 그만큼 최강이었던 운영체제를 잇는 거니까 써볼 만 하다.
2. vim
vim 개발자도 emacs를 쓴다고 했던가... vim이 진리면 emacs는 종교라고 했던가. 나도 emacs를 좋아하지만 서버 관리도 하다보면 vim도 emacs도 없지만 vi 는 있는 경우가 허다하다. 그리고 프로젝트 하다보면 source insight라던지 elicpse도 병행해야 써야할 때가 온다.
vim.org에서 gvim이란 것도 있으니 윈도우에서도 강력하게 쓸 수 있다.(일반 편집기가 없는 기능으로 편하게... 매크로나 세로 복사 기능등)
3. xming, linm, vmware
리눅스를 보다 편리하게 쓰는 도구들이다. 실재로 서버를 vmware로 돌린 적도 있다. 물론, 쓰고 있는 하드웨어 성능을 100% 이끌어 주진 못하지만 하드웨어를 바꿀 때나 서버 이전 시 무쟈게 유용하다. 가상화의 꽃은 역시 vmware... virtual box도 좋다.
4. gcc
현재 이 블로그는 C를 대세로 쓰고 있으니까 긴말 않겠다.
5. apt-get
이것은 명령어이긴 하나. 웹서버를 구축하거나 파일 서버를 구축, 데이터 베이스 서버를 하거나 원하는 서버를 구축할 때 유용하게 쓰일 수 있다. 예전에는 소스 컴파일하고 궁합도 맞도록 하나하나 깔아 주어야 했지만 요즘엔 apt-get으로 간단하게 끝낸다.
사실 이게 다이다. 심심하면 리눅스 마스터 라는 자격증을 공부하면서 명령어들을 외우라고 하고 싶다. 자격증이 별 도움은 안되지만 공부했다는 티는 조금은 낼 수 있으니까.
나머지 리눅스 자격증은 취미로 리눅스를 한다기 보다는 직업적으로 할 때 필요할 것 같다.
나도 딱히 잘하는 것은 없지만 그래도 오래 했으니까 추천해줄 것은 키워드 밖에 없다.
해당 키워드를 찾아서 그것이 패키지이든 운영체제든 유틸리티든 공부하라고 하고 싶다.
1. 우분투
우선 운영체제는 우분투. 오랜동안 레드햇만을 써왔지만 우분투가 대세라는 것을 말하고 싶다. 따지고 보면 신생도 아니다. DVD 미디어 갓 나왓을 때 데비안 패키지 꾸우니까 DVD12장 나왔었던 것 같다. 그만큼 최강이었던 운영체제를 잇는 거니까 써볼 만 하다.
2. vim
vim 개발자도 emacs를 쓴다고 했던가... vim이 진리면 emacs는 종교라고 했던가. 나도 emacs를 좋아하지만 서버 관리도 하다보면 vim도 emacs도 없지만 vi 는 있는 경우가 허다하다. 그리고 프로젝트 하다보면 source insight라던지 elicpse도 병행해야 써야할 때가 온다.
vim.org에서 gvim이란 것도 있으니 윈도우에서도 강력하게 쓸 수 있다.(일반 편집기가 없는 기능으로 편하게... 매크로나 세로 복사 기능등)
3. xming, linm, vmware
리눅스를 보다 편리하게 쓰는 도구들이다. 실재로 서버를 vmware로 돌린 적도 있다. 물론, 쓰고 있는 하드웨어 성능을 100% 이끌어 주진 못하지만 하드웨어를 바꿀 때나 서버 이전 시 무쟈게 유용하다. 가상화의 꽃은 역시 vmware... virtual box도 좋다.
4. gcc
현재 이 블로그는 C를 대세로 쓰고 있으니까 긴말 않겠다.
5. apt-get
이것은 명령어이긴 하나. 웹서버를 구축하거나 파일 서버를 구축, 데이터 베이스 서버를 하거나 원하는 서버를 구축할 때 유용하게 쓰일 수 있다. 예전에는 소스 컴파일하고 궁합도 맞도록 하나하나 깔아 주어야 했지만 요즘엔 apt-get으로 간단하게 끝낸다.
사실 이게 다이다. 심심하면 리눅스 마스터 라는 자격증을 공부하면서 명령어들을 외우라고 하고 싶다. 자격증이 별 도움은 안되지만 공부했다는 티는 조금은 낼 수 있으니까.
나머지 리눅스 자격증은 취미로 리눅스를 한다기 보다는 직업적으로 할 때 필요할 것 같다.
gcc Hello World
cat > a.c
main() { printf("Hello World\n"); }
^C
gcc a.c
./a.out
하면 가장 간단한 Hello World 프로그램이 나온다.
뭐, Warning도 나지만. 출력은 잘 된다.
이제 책들을 구입하거나 얻어서 소스를 타이핑하면 자기께 된다.
초보 강의 사이트도 넘쳐나니 굳이 책을 사지 않아도 된다.
main() { printf("Hello World\n"); }
^C
gcc a.c
./a.out
하면 가장 간단한 Hello World 프로그램이 나온다.
뭐, Warning도 나지만. 출력은 잘 된다.
이제 책들을 구입하거나 얻어서 소스를 타이핑하면 자기께 된다.
초보 강의 사이트도 넘쳐나니 굳이 책을 사지 않아도 된다.
피드 구독하기:
글 (Atom)
대학원생의 투고 지도 ④ (완결) — 논문의 수준이란 무엇인가: 사다리와 사분위, 첫 논문 전략
완결편이다. "논문 수준"이라는 말을 해부하고, 에듀테크 석사생의 첫 논문 전략으로 마친다. 학위논문과 학술지 논문은 다른 장르다 먼저 가장 흔한 혼동부터. 학위논문(thesis)은 "내가 연구를 수행할 줄 안다...
-
프루나는 이제 믿을만한 공유가 안되고 있다. 젠장. 영화 다운 받아보면 전부 야동이나 포르노류 밖에는 없다. 신고되어 있는 자료부터 보지만 신고가 안되어 있는 것은 제대로 다운도 되지 않는다. 이젠 유료 사이트를 믿을 수 밖엔... ...
-
...
-
구글에서 공개된 현재 최신 버전인 안드로이드(android 4.2.1_r1)에서 SELINUX 부분만 떼서 분석을 해 보려고 한다. 그 첫번째... extras 패치 내용... (이K님 감사합니다.) extras는 말 그대로 엑스트라들을...