2011년 12월 31일 토요일

throws

throws 문은 예외를 현재 메소드에 처리하지 않고 상위로 전파하여 처리하고 싶을 때 사용
예외가 가장 상위 레벨의 메소드로 전파가 되었는데도 예외를 처리하지 않고 다시 상위로 전파하고 있으면 자바가상머신은 해당 예외를 잡아 예외 정보를 화면에 출력하고 프로그램 종료









혼자 진행하는 ICT 동아리... ㅠㅠ 실력자가 없다. 댄장.


현재 FA 관리자가 없으므로 단순히 공지 형태로 진행하겠습니다.

PDS 출자금 +100만. 창단기 하준호.

-------------------------------------------------------------------------------------------


돈이 있다면 개인적 디바이스들은 애플로 가는 것이 맞다.

노트북만 봐도 맥보다 나은 사양으로 가격은 더 낮은 경우도 봤고,

애플이 만드는 제품중에 유무선 공유기 같은 애들은 성능 이슈로 문제되는 후기를

많이 봤었다. 그리고 애플이 생산하는 제품들을 모두 애플이 만들 수 있는 것도 아니다.

SK처럼 애플도 모두 자기 바운더리 안에 두려고 한다.

애플 아닌 윈도우는 진영은 그런 성향이 더 심하다.

물론 운영체제를 유연하게 만드는 것은 좋지만. 그런 유연함으로 수많은

바이러스들이 생기고 또 바이러스가 아니더라도 커스터마이징한 회사(삼성같은)가

사용자 정보를 마음대로 다룰 수 있게 된다.

뭐, 도덕적인 회사라면 괜찮겠지.

각설하고.

애플이 최고의 하드웨어가 아닐지라도 3rd party에게 제어권을 다 주지 않고,

나름 혼자서 다 케어 하려고 하고 있다.

그리고 실제로는 국내 회사가 아니라서 정경 유착도 되기 힘들 것이다.

가장 매력적인 것은 윈도우 보다 사용자가 적다는 것.

이것은 더 큰 가능성을 이야기 하고 있다.

이왕 사려면 애플 제품을 사는게 맞다.

나 같은 경우는 맥북도 있고 윈도우 디바이스도 쓰고 리눅스 디바이스도 쓴다.

개발자이다 보니 이것저것 다 사용하게 되는데, 사실 내 눈에 모두 버그 덩어리로 밖에

안 보인다. 영화 볼 때는 윈도우가 좋고, 개발은 리눅스가 좋고. 뽀데는 애플이 좋다.

사실 썬 마이크로 시스템즈가 건재하면 그것만 이용하련만...

애플은 배터리를 갈 수가 없는데, 사실 예쁜 것도 이유 겠지만. 배터기가 갑자기 빠졌을

때와 같은 상황의 컨트롤은 정말 엄청난 기술력을 요하는 부분이다.

그리고 애플의 실제 개발자는 싱가폴에 있다고 미국 친구가 이야기해 줬었는데,

딱히 공개된 부분이 많지도 않은 애플이라.

삼성에 다니긴 하지만 옴니아 때부터 쭉 프로젝트를 해서 아는데 디자인은 애플이

늘 먼저 나가고 우리 회사는 따라가기 식인 것 같아서 참 씁쓸하다.


갤럭시 S 처음 나왔을 때도 큰 박스 였다가 아이폰 3GS가 단촐한 박스로 가니까

순식간에 박스도 바뀌었다.

 더 짜증나는 건 LG 디바이스를 가지고 회사 가면 아예 봉투에 봉인해 버리는데,

애플 디바이스를 들고 가면 간단히 스티커만 붙인다.

 따라하는 곳에 대한 예의인가?

 삼성도 부서마다 다르겠지만 내가 LG나 아이폰 쓰는 걸 눈꼴셔 해서 걍 삼성폰 회선 놔두고

2개를 쓰는데 개발자들이 자꾸 내 개인폰을 빌려가서 써서 겁나 짜증이 났었다. 보고 참고

한다고 하는데... 사실 사람 생각 자체가 모방이지만 그래도 창조자와 모방자 차이를 안다.

 내가 볼 때 우리 회사는 평생 모방만 하다가 종칠 것 같다. 모토라로 까부수자는 글귀 하나로

무선사를 이룩했기 때문에 그 열정을 알긴 하는데, 걍 대충 된다 싶으면 배끼고 보는 더러운

심보는 고쳐야 한다고 생각한다.

 엘리베이터 탔을 때 피씨쪽 임원이 맥북 까보니 정말 잘 해놨더라 하는 이야기를 듣고,

 결국 이런 문화가 걍 다 퍼져 있음을 알게 되었다. 아니, 그럴거면 아이폰 쓰라고 아예 권장을

하던가. 좋은 음악을 들어야 좋은 곡을 쓰듯이 좋은 걸 써봐야 좋은 걸 만들지 않겠나...

 디자인 하는 친구들은 다른 회사꺼 배끼는데 디자인이 좋다는 건희형 말에 개발자는 개 발

보듯 하고 디자인 하는 친구들은 무조건 우대해 줘봤자. 결국 애플 발밑이라고 생각한다.

 뭐, 무조건적인 조직에의 반발은 아니고 안드로이드 팔러 왔는데 리눅스 팀 있다고 걷어차 

버리더니 몇년간 못 만들고 나니 그 리눅스 팀 사람은 GA(google Android)팀으로 가서 이미

해 놓은 리눅스 빨이 있으니 좋은 고과 받는 것을 보면서(걔네들이 상품화 때 딱히 뭘 도와주기

나 하나...) 세상 참 웃긴다고 생각했고,

 나부터 제대로 생각을 가지자고 마음 먹었다.

 삼성 감압식 터치 방식 고집하다가 애플 잘 나가니까 정전용량 방식으로 터치 바꾸라고 했고,

디자인(제품, 박스 셋, 설명서 등등)보면 걍 그대로 가져 왔다고 생각한다. 증거? 증거는 내가

둘 다 쓰는 사용자니까. 

 개발은 아니다. 개발은 각 폰마다 소프트웨어가 다 달라진다(같은 안드로이드라도). 

뭐, 내가 디자이너는 아니니까 디자인도 다륻고 하면 할말은 없고, 디자인 하는 친구들도

우리가 폰에 다 다른 소프트웨어를 넣는다고 하면 다 같은거 아니냐고 반문할 거니까.

 믓튼... 삼성맨이니까 삼성 제품 많이 쓰긴 하는데(그래봤자 이익은 외국인 배당금으로 다 나가겠지만) 잘 만든 제품보고 잘 만들었다고 할 줄 아는 자존심은 버리지 말아야 겠다.

 회사 이야기가 나오니 횡설수설 하게 되는구만.

 참... 갈길이 멀다. 일본도 같은 입장 이겠지. 잘못은 했지만 지네들이 일본 살고 있으니까

진실을 밝히기 힘든것처럼 나도 삼성안에 있으니 그 마음을 백번 이해하겠다.

그래도 독도는 우리땅. 허러쉐리들.

2011년 12월 10일 토요일

C 언어 역사는 들어가야...

기억에 캔톰슴이 B 언어를 만들었고 책은 둘이서 집필한 것으로 알고 있어서 관련해서 깊은 조사 후 추가적인 정보를 제공해야 겠다. 이런 사유로... 운영하는 프로그래머 카페에서 

최근 목적코드와 실행코드를 구분 못하고
크로스 컴파일러가 왜 있는지 정확히 모르는
컴퓨터 관련학과 고학년을 여러명 만나서 적잖히

충격은 먹은...

하긴... 요샌 추상화가 대세니까
비공개
뜨끔ㅋㅋ열공하겟심다

. 개요
  C언어는 1972년에 미국 Bell 연구소의 시스템 프로그래머인 Dennis Ritchie에 의하여 설계되었다.
  Bell 연구소의 시스템 프로그래머들은 작업 수행 환경 개선을 위하여 프로그램 개발을 위한 보다 새로운 언어를 필요로 하게 되었는데, 이러한 요구를 배경으로 1969 Bell 연구소의 Ken Thompson 등에 의하여 UNIX라는 운영체제가 탄생하게 되었다.
  Bell 연구소에서 개발된 UNIX 운영체제는 본래 어셈블리 언어로 개발되었기 때문에 기계 의존적이었다. 
  따라서 여러 컴퓨터 기종간의 호환성을 가질 수 있을 만큼 고급 언어이면서 기능 면에서 어셈블리 언어와 같이 컴퓨터의 하드웨어 기능까지를 제어할 수 있는 새로운 프로그래밍 언어가 필요하게 되었다. 이에 따라 Ken Thompson은 이식성이 높은 고급 언어인 B언어를 개발하였으며, 그후 Dennis Ritchie가 B언어를 개량한 C언어를 개발하게 되었다.

◉ C언어의 발전 과정
▪ALGOL 60 / 1960년 국제위원회 설계
▪CPL(Combined Programming Language) / 1963년 케임브리지 및 런던 대학
▪BCPL(BASIC Combined Programming Language) / 1967년 케임브리지,
  Martin Richards
▪B / 1970년 Bell 연구소, Ken Thompson
▪C / 1972년 Bell 연구소, Dennis Ritchie
▪C++ / 1980년대 초, Bell 연구소, Bjarne Stroustrup

◉ C언어 응용분야 : 자료구조, 게임, 인공지능, 수치계산 등


2. C언어의 특징
① 이식성이 좋다.
② Block 구조형 언어이다.
③ 하드웨어 제어가 가능한 저 수준의 기능을 갖고 있다.
④ 컴퓨터 구조를 염두에 둘 필요가 없는 고급 언어이다.
⑤ 다양한 연산자를 사용한다.


3. 컴파일 과정
   소스코드 ⇨ 컴파일러 ⇨ 목적코드 ⇨ 링커 ⇨ 실행코드
                           ↗   ↖
         시동(start-up)코드   라이브러리 코드

2011년 12월 6일 화요일

[비전] plandosee.org

플랜두씨는 계몽 동아리 입니다.

누구나가 계획을 세워 행복해질 수 있다는 것을 모토로 계몽 활동을 할 것입니다.

계획을 세우는 방법도 공유할 것이며,

그것을 실천하는 방법.  실천을 하고 나서의 피드백 등등.

올바른 계획을 세우고 그것을 실천하고, 계획이 성공이던지 실패이던지

거기서 행복을 찾아내는 방법에 대한 연구를 하는 동아리 입니다.

2012년도 목표는 계몽 동아리를 탄탄히 할 수 있는 창단기 모집이 첫 목표입니다.

기수별로 특색이 있도록 모집을 하겠지만. 창단기 만큼은

풍파 많은 세상에서 흔들리지 않는 뿌리같은 사람들, 자신에게 펼쳐진 운명과

세상속에서 선방하고 있는 사람들을 뽑을 것 입니다.

그렇게 뿌리를 공고히 해야 앞으로 계몽 동아리의 항해에 좌절이 있더라도

다시 일어설 수 있는 힘을 가지게 될 것입니다.

plandoosee.org의 최종 목표는 자본주의 사회에 꼭 필요한
하나의 사상이 되고 스스로 일어설 수 있는 생각의 방법을 공유하는 것 입니다.

그리고 다음 기준에 부합한다면 얼마든지 조직은 유연하게 바뀔 수 있습니다.

1. 모든 사람의 행복을 바란다는 점.
2. 그 행복은 인간의 사고(생각)에 기준한다는 점.
3. plan do see 의 과정이 필요하다는 점.

2011년 12월 4일 일요일

[CODE] C++에서 *와 &의 차이

레퍼런스 변수는 c에서는 작동하지 않는다.


/Users/hajunho$ !gcc
gcc a.c
a.c:8:5: error: expected identifier or '('
int &m = a;
    ^
1 error generated.


 원래 없는데 에러 메시지 타입이야 어떤들 난 모르리. 원소스에(ㅡㅡ; 별거 없어서 안 씀) 몇 줄 추가해 보았다.

#include <stdio.h>

int main()
{
int i[] = {1, 2, 3};
int* j = i;
int a = 10;
int &m = a;
printf("%d", m);

}

C++에서는 먹는데 10이 출력된다. int &m = j 를 대입하면?

g++ a.cpp
a.cpp:7:6: error: non-const lvalue reference to type 'int' cannot bind to a value of unrelated type 'int *'
int &m = j;
     ^   ~

1 error generated.

포인터 타입에는 대입될 수 없다고 나온다. j를 *j로 바꾸면 정상 동작한다.

즉, 레퍼런스 변수는 값을 가리키는 변수다.

printf("%d\n", &m);

printf("%d\n", i);

m변수의 주소와 i의 주소를 보면

/Users/hajunho$ !g++
g++ a.cpp
a.cpp:8:16: warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
printf("%d\n", &m);
        ~~     ^~
a.cpp:9:16: warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
printf("%d\n", i);
        ~~     ^
2 warnings generated.
/Users/hajunho$ ./a.out 
1348565628

1348565628

같다.

결론은 레퍼런스 변수는 NULL 을 가질 수 없고, 값을 지칭하는 변수라는 것.

포인터 변수에 아무것도 쓰지 않으면 주소 연산이 되는 것과 달리 레퍼런스 변수는 값 연산이 되어 버린다. swap 같은 것을 구현하면 코드양이 준다(편리하다고는 하지 않겠다)

즉, 레퍼런스 변수는 따로 메모리를 잡지 않는 변수이다.

[] 연산자 오버로딩에서

int element(int i)
blah, blah
return arr[i];
}
로 되어 있을 때 a.element(10) = 5 로 쓰면 에러다. 이 때 int를 int&로 바꿔주면 가능하다. 값을 리턴하는데 값에다가 값을 대입하니... 레퍼런스는 해당 값이 있는 주소를 반환한다. 레퍼런스 변수에 대입할 때는 값 형태로 대입된다는 사실은 변함없다.

다 알겠지만 포인터 변수 자체의 메모리는 따로 잡힌다. 4바이트, 64비트에서는 8바이트로 고정이다.

동일한 기능을 하는 경우 레퍼런스 변수는 쓰는 것이 더 효율적이라는 말이다.(이론적으로는...)

효율적이란 말은 특정 상황에서 시간이 빠르거나 메모리를 적게 차지하는 경우를 말한다.

그러나 시간의 경우 컴파일 타임도 들어가므로 좀 더 세밀한 측정이 필요한데 별로....

C++은 갈수록 어려워지는게 생산성이 낮아지는 것은 사실이다. 온갖 라이브러리 붙여다가 쓰면 되겠지만

새로운 언어들은 이미 붙어서 나오니까.

왠만하면 객체를 제외하고는 C의 고유 기능으로 쓰는 C++ 프로그래밍을 하는게 좋을 것 같긴하다.

다만 나 같은 경우 이런 생각이 항상 base에 있다. 프로그램을 정말 잘 짜면

혼자서 다 짜면 되고 모듈 나눌 필요도 없이 main에서 쇼부치면 된다. 그러나 어쩔 수 없이 모듈을 나누게 되고 나누어진 모듈 끼리 통신하는게 필요하다. 그게 콜백이던 값 전달이던 메모리 공유던 간에 파라미터를 넘긴다는 것으로 이해할 수 있다. 파라미터를 넘길 때 원 값을 유지하려면 값을 넘겨 복사하면 되고 원 값을 바꾸려면 주소를 넘기면 된다. 그것이 포인터, 또 함수 포인터다. 콜백도 함수포인터로 구현하고 자바에서도 실제적으로 인터페이스로 구현한 껍데기의 주소를 넘기는 방식으로 콜백을 쓴다.

그럼 사실 레퍼런스 변수라는 것은 이상적인 녀석이다. 반복 때문이던 효율성 때문이던 다른 사람이 쓰라기 때문이던 모듈을 나눈다면 주소 교환 방식이 좋다는 것이다. 더 커지면 소켓, 파이프, 디바이스 드라이버, COM, TCP/IP가 들어간 온갖 프로토콜... 이겠지만 원래 변환할 값을 넘기는 것이 맞는 페러다임이다. COPY가 필요하다면 컴파일러에 맡기지 말고, 자료 구조를 하나 만들고 거기서 컨트롤하는게 맞다.

그러나 이런 생각들과 별개로 시장은 너무 빨리 변하고 개발 속도는 느리기에 그냥 이해하고 적당히 맞춰서 쓴다.

안그랬으면 CPU 설계하고 거기 맞는 운영체제 만들고 프레임웍 만들고 했겠지 ^^;;

2011년 12월 1일 목요일

도출 연역을 이용한 정리 증명 알고리즘

증명하고자 하는 정리를 부정하여 공리 리스트에 넣음
공리들을 연언 표준형으로 표현한 후 절 분리
도출 가능한 쌍이 업을 때까지 다음을 반복
1. 도출 가능한 쌍을 찾아 도출절을 구함
2. 도출절을 공리 리스트에 추가
3. false가 얻어지면 정리가 참임이 증명됨
정리가 거짓임을 알리고 종료

[공지] 계몽 동아리 plandosee.org 창단

12월 1일 정동민 lev.31 이 입단을 하게 따라

xxx 출신인 그에 맞게 plandosee.org는 xxx 비공식 계몽 동아리로 출범하였습니다.

2011년 11월 26일 토요일

Constructor

Constructor(생성자)란 클래스의 초기화를 위해 제공되는 특별한 메소드. 주로 클래스의 변수를 초기화 할 때 사용
디폴트 생성자 : 매개변수를 가지고 있지 않은 생성자. 클래스에 생성자가 선언되어 있지 않을 시에 컴파일러는 객체 생성시 자동적으로 디폴트 생성자를 추가. 생성자가 하나라도 있으면 디폴트 생성자는 생성되지 않음
Constructor(생성자)의 특징
1. new 키워드와 함께 호출
2. 객체 생성시 한 번만 수행
3. 생성자는 상속되지 않기 때문에 오버라이딩 되지 않는다.
4. 생성자의 이름은 클래스의 이름과 동일해야 한다.
5. 리턴형을 가지지 않는다.
6. final, abstract, native, synchronized 제한자는 선언 될 수 없다.(접근 제한자는 선언 될 수 있음)
7. 다른 메소드처럼 호출할 수 없다.
8. 메소드에 들어가는 매개변수만 다르면 여러 개 선언 가능
9. 생성자를 선언하지 않으면 디폴트 생성자 자동으로 추가된다.
10. 상위 클래스에 디폴트 생성자가 존재하지 않으면 하위 클래스는 컴파일 되지 않음
11. 상위 클래스의 객체 생성자를 호출할 때는 super 키워드를 사용
12. 자기 자신의 클래스의 다른 생성자를 호출할 때는 this 키워드 사용
this, super 연사자들은 생성상의 첫 번째 문장에 선언해야함

Overloading(오버로딩)
Overloading(오버로딩) : 클래스 내에서 같은 이름의 메소드를 여러 개 선언 하는 것.
Overloading(오버로딩) 규칙
1. 메소드들은 같은 클래스에 존재해야 하며 같은 이름을 가져야 한다.
2. 메소드들은 매개변수의 형이 서로 다르거나 개수가 달라야 한다.
3. 오버로딩 될 수 있는 메소드의 개수는 재한이 없다.
4. 메소드의 리턴형은 상관하지 않는다.
Signature(시그니쳐) : 메소드를 구분하는 기준, 제한자와 리턴형을 제외한 메소드의 이름과 매개변수만 표함

필요한 사람

전 소프트웨어 엔지니어 입니다.

그래서 plan이 소프트웨어 관련이 많아요.

다른 사람들은?

각자 그들만의 plan이 있을 겁니다.

없으면 만들고

실천하고

돌아보시고

알리세요!

plan do see에 대한 설명

긴 말이 필요 없습니다.

계획하고
행동하고
돌아보는 거예요.

멤버십에서 우리끼리 낸 책.

samba server에 대한 책이 없어서 팀원들과 책을 만들었다.

출판사에 넘기면 책이 나올텐데.

따지고 보면 책 내는 것이 그리 어렵지 않게 느껴졌다.

다만 문제는

항상

디자인...

디자인, 신경 쓰면 잘 할 수 있을 것 같은데 내 전문성을 잃어버리겠지.



좋은 디자이너를 만나고 싶다.

p 1 2 3 4 ... 모든 프로젝트 종료.

홈페이지를 만들지 않고 plandosee 계몽을 여기서 시작하기로 했습니다.

2011년 11월 25일 금요일

p2) xargs 사용법.

프로젝트 2는 윈도우라고 해놓고 자꾸 리눅스 명령어를 포스팅 하게 되네요.

cat addLIB.txt | xargs -I {} scp -r user@123.123.123.256:{} {}

라이브러리 추가할 것은 txt에 몰아 넣고.

xargs를 -I (아이) 옵션에 {}를 주면 {}를 $1, $2 처럼 인자로 사용할 수가 있게 됩니다.

무쟈게 편하죠.

찾는다고 고생...

p2) sftp 사용법

sftp user@ip or address

mget 이나 get으로 파일 받음.

폴더는 안됨.

폴더 하려면

scp -r ip or address:/opt /opt

이런식으로 복사.

2011년 11월 24일 목요일

p3) 안드로이드 공부법

안드로이드 게시판으로 왔네요. 사실 아래단 쪽을 하고 싶은데...


하는 일도 안드로이드라 다른 쪽에 시간을 낼 수도 없고 수많은 고수들 사이에서

놀림받을 지도 모르니까 좋아하는건 포기하고 원래하는 걸 할 수 밖에요.



담주부터 이주간 신혼여행이라. 공부법 올립니다.



안드로이드는 오픈소스 플랫폼(말이 오픈 소스지 플랫폼 단은 점점 close되고 있습니다. 구글이 모토로라를 인수했기 때문이죠)

이었기 때문에 자료가 굉장히 많습니다. 하지만 책은 하나 쯤 있어야 하겠죠?



김상형씨의 안드로이드 프로그래밍 정복이라는 책이 있습니다. winapi.co.kr 운영하시는 분이고 윈도우 서적에서 명성이 있으신분이라 그런지 읽으면 읽을수록 내용이 깊은 사골 우거지 곰탕같은 책입니다. 이미 다른 곳에서는 전문가지만 안드로이드가 나온지 얼마 안되었으니, 불완전한 내용이 있을수도 있으니 가급적 최신판을 찾으셔서 사시기 바랍니다.



그리고 안드로이드 마켓에 개발자 등록을 합니다. 무료 앱 올리려면 25$인가만 내면 되는데. 요새 정책이 바뀌어서 사업자 등록 번호가 있어야 한다고 하던데...(저는 계정 전환을 안해서 잘 모르겠네요)

개발자 등록은 왜 하느냐? hello World를 만든다고 해도(실재로 이걸 올리진 않겠지만) 마켓에서 찾아져야 만드는 재미가 있기 때문입니다. 개욕을 들을수도 있지만 올려놓고 버그 리포팅을 받는 것도 앱 개발에만 집중할 수 있는 방법입니다.

그래도 최선을 다해서 퀄리티 있는 앱을 올려야 자신에게 미안하지 않겠죵?



믓튼 인터넷 뒤져서 개발자 등록을 마치고 나면 산 책으로 간단하게 만들어서 올려봅니다.

그럼, 마켓에 올리는 방법 apk만들어서 사인하는 방법등을 익히게 되고 이클립스의 기능에 또 한번 놀라게 됩니다.

(정말 멋진 에디터 같습니다. 소스 인사이트나 gvim, 울트라 에딧도 좋은 툴이죠 - 다 장단점이 있음-)



마켓에 올리면 3시간 정도(어떤땐 바로되는데 근래에는 하루 걸리는 것 같아요)면 자기 앱을 검색할 수 있습니다.



아이폰의 경우엔 일년에 30만원인가 계속 내야 된다고 들은 것 같은데(뭐 사업자 등록도 안하고 세금 안내도 되니까 유료앱은 이쪽이 더 낫죠) 구글 계정은 안그렇습니다.뭐... 잘나가면 나중에 돈 더 받아 (쳐) 먹을 수도 있겠죠. <망고 화이팅> 발전해라 망고.



그 다음은 안드로이드 개발자 사이트에서 api를 검색해서 그걸 예제 없이 바로 쓸 수 있으면 이미 고급(저도 여러번 틀려야 겨우쓰죠 ㅋㅋ)입니다.



시간나면 앱 분석 좀 할께요.



자바는 기본으로 알고 계셔야 하구요. 자바 책은 헤드퍼스트 자바 책 추천 드립니다.

폭넓게 읽은 것은 아니라. 다른 분들이 추천해 주셔도 좋구요.



아님 SCJP(이젠 오라클로 넘어가서 이름이 바뀌었는대 http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=504

핵핵 찾기 힘드넹... 어라 그새 SE7이 나왔네요. 믓튼 해당 시험 준비하시면서 자격증도 따고 공부하는 방법도 있습니다.

안드로이드 시험은 없어요~(소비자가 시험관이죠 ㅋㅋ) 제가 SCJP 딸때는 20만원만 있으면 되었는데 요샌 교육도 들어야한다고

합니다.(지금 시험 준비하는 애들 말로는 한국은 아직 다 안 바뀌어서 교육 안 들어도 된다고 하네요) 참고 하시구요.



자격증이 뭘 보장해 주는 건 아니지만. 자바 할줄안다는 것 보다 자격증 있다고 하는데 어필하기 편리한거죠.

근데 굳이 딸 필요도 없는게 앵그리버드, 혹은 카카오톡 개발자다 하면 다른 말이 필요없겠죠?



흐흐.[

2011년 11월 12일 토요일

p2) 보안 관련 사이트

http://imabsolutelypositive.tistory.com/

2011년 11월 5일 토요일

p2) 윈리야그 12 끗.

자정인데 일 하면서 글 씁니다. 담 주 결혼인데 된장 ㅠㅠ 막장 고추장 쌈장 흑흑 신혼여행 때매 담달에나 뵙겠네요. 전 안드로이드 게시판으로 넘어 가겠습니다.








우선 총정리구요. 본래 리눅스 자세히 쓰다보면 한없이 길어질 것 같아서 생각 날 때 마다 총총 쓰려고 문을 닫습니다. 왜냐면 다른 분들도 강좌를 올려야 하는데 게시판 활성화를 위한 초석은 올렸다고 보거든요. 난잡한 글이니까 정리 잘하시는 다른 분들이 편하게 강좌하시고 입맛에 맛는 분들이 봐주면 게시판 활성화가 되는거죠.







우선 리눅스는 안드로이드가 리눅스 커널 기반(사실 쉘도 올라가 있습니다)에 달빅이라는 자바 가상 머신을 올린터라. 안드로이드 = 리눅스 + 자바 라고 간단히 말할 수가 있겠네요.







리눅스로 좀 들어가고 싶으시면 우선 커널을 이해하기 위해서는 두가지 방법이 있습니다. 리눅스 커널 겁나게 크고 각 모듈별로 박사 이상의 실력을 가진 분들이 담당을 하기 때문에 천재가 아닌 이상(천재는 김웅용씨)혼자서 커널을 다 헤집고 다니긴 힙듭니다. 하지만 커리큘럼을 알기는 힘드니 10년 정도 경험자가 이야기 해 드리겠습니다. 물론, 개발자로 테크트리를 탄다고 보구요. 리눅스 관련 이야기는 앞에서도 했지만 또 지금 생각나는게 맞을 수도 있으니까요.







리눅스 깔고 명령어를 공부한다. - 그럼 일단 리눅서가 되는거죠.

커널 컴파일을 엄청나게 해 본다.

예전에 리눅스 원에 계셨던 한 분이 커널 컴파일 8000번 해 보셨다고 했어요. 그만큼 커널은 옵션도 많고 옵션마다 디펜던시도 달라서 커널 컴파일만 하다보면 어느새 우리 커널이 어떻게 돌아가는지 대충 감이 잡힙니다. 물론, 소스는 모르지만 메커니즘을 알게 된다는 거죠.



리눅스 디바이스 드라이버를 만들어 봅니다.

대부분 캐릭터 디바이스 드라이버인데요. 커널을 이해하기 위한 첫걸음이라고 할 수 있죠.



이거 하다보면 커널 코딩 스타일에 익숙해지는데요. C로 객체지향을 어떻게 구현하는지 맛볼수가 있습니다. 포인터의 늪에서 잘 빠져 나오시길 바랍니다.



빡시게 해놔야 해요. 왜냐면 몇 년 지나면다 잊어 버립니다.







3까지 하시면 아마 마이크로C/OS-III나(최근에 업뎃했죠 쓰리로) AVR에 관심이 가실 겁니다. AVR로 넘어가도 마이크로 씨 포팅 프로젝트가 검색이 잘되서 해보고 싶은 욕심이 생기죠.





5-1.







고등학생 이시라면 AVR로 넘어가시길 바라구요. 왜냐면 AVR하다보면 마이컴 만들고 싶고, 기판에 납땜해서 거기다가 펌웨어 올리고 싶고. 그러다보면 간단한 로봇하나 만들게 되고 나중에는 거기다가 커널을 포팅해서 올리다 보면 어느새 임베디드 엔지니어가 되거든요.







5.2.



대학생이시라면 시간이 없으니 AVR로 가지 마시고 좀 더 커널 깊숙이 들어갑니다. 그러다가 고걸로 대학원가고 박사밟아서 교수가 되면 best 케이스 인거죠. 그게 안되면 연구한 걸로 어느 기업을 가던지 쉽게 적응하실 수 있을 겁니다. C++도 병행해서 익혀두면 어떤 언어를 하던지 다 머릿속에 들어오실거예요.







5.3



저처럼 일반인이시라면 리눅스 멀티미디어 프로그래밍이나 서버 쪽 공부를 해야 합니다. 사실 제 선배님 말대로 기술사 따고 감리사 따서 업계의 포주가 되는게 한국에선 살아남는 길이긴 한데.



깊은 지식은 하느님이 만든 자연의 법칙을 아는데에 있고 좀더 전기에 근접하고 싶으시면 늙었으나 하드웨어 디펜던시한 커널을 계속해서 공부하고 사실 그거 하면서 전기기사나 전기 공사 기사 해서 굶어 죽지는 않게 하는게 중요하겠죠. 남는 시간에는 계속 파는 겁니다. 그런데 나이가 들면 결혼도 해야 되고… 선택의 폭이 좁아져서 떠나게 되는거죠… 아 완전 슬퍼.











뭐… 진로랑 접목해서 대략적으로 적어봤는데 혹시나 궁금한 점을 댓글로 달아 주시면 제가 아는 다른 쪽 시야가 팍 열려서 조언을 해 드릴 수 있을 것 같습니다. 물론, 조언을 받는 것도 좋아하구요. 생각이 다르면 토론도 좋아라 합니다.







그럼, 이 글 안에 있는 키워드 들로 지식을 넓히시길 바랍니다.



별거 없지만 모르시는 분들에겐 큰 도움이 될 거라 생각 되구요.







그리고 마지막으로 정수를 하나 가르쳐 드리면…







전 개발만 하다가 기업에 들어오니 개발 안하시는 분들도 많지만 개발을 모르시면서 코더라고 얕잡아 보시는 분이 많습니다. 사실 코더를 거쳐야 디벨로퍼가 되는건데 코더를 안하면 디벨로퍼인줄 아시는 분들이 많더라구요. 심지어는 직급이 높다고 아키텍트로 착각하시는 분도 수없이 많습니다. 아키텍트의 코드 한 줄은 수십억을 아끼고 수많은 코더들이 편할 수 있는 건지도 모르고 지시할 위치에만 있으면 아키텍트인줄 알아요. 사실 한국엔 아키텍트 없습니다. 김택진, 안철수, 이찬진등등 처음엔 코더로 시작해서 기업까지 만들고 유명하신 분들이 아직 코드의 필드에 있으시면 아키텍트겠죠.







코더든 아키텍트든 디벨로퍼든. 행복의 조건은 같습니다. 재미죠. 같이 토론하고 만들어가면서. 부족하지만 서로를 보완하는 팀 플레이를 느끼는 것. 밤새는 동료를 뒤로하고 자기 일(데이트나 경조사 등등)을 가더라도 동료는 그걸 이해해 주는 배려심. 그리고 나중에 그 동료는 다시 갚아주는 전우애(?) 등등…



사실 추구하는 가치가 같은 사람끼리 모이면 정말 재미있는 곳입니다. IT 필드는.







제가 리눅스 후졌다고 이제 하지 말라고 비전 없다고 말하지만, 세상의 수많은 리눅서 들이 마소를 긴장시켜서 더 발전시키고, 그 소스를 기반으로 수많은 앱들이 나와서 삶을 윤택하게 합니다.



사실 전 젊음을 많이 잃었기에 리눅스에 발을 못 들이는 능력이 없는 사람이죠.







젊은 분들이 리눅스 관련 기술의 대부분을 그리고 재미를 맛보시길 바랍니다~







사실 대한민국 엔지니어에게 가장 필요한 건 재미입니다. 행복이고.







두리뭉실한 강의는 이제 끝내고 담에 하나씩 올릴 때는 알차게 올려볼께요~



[

2011년 11월 2일 수요일

p4) 책 버리기.


 사실 난 책을 다 읽고 나면 버리는데(신판사려고)

 오늘은 책을 컴퓨터 서적은 8권정도 나눠 줬다.

물론, 가지고 있어야 할 책들도 있었지만.

집에 책이 많으면 후질그레지는 것 같아서. 인테리어를 선택하기로 했다.

머릿속에 못 넣은 지식이나 앞으로 못 넣을 지식은 어차피 내것이 아니니까.

이제 책도 버리기로 했다.

p) list

p1 - windows 알기
p2 - java 알기
p3 - 버리기
p4 - eng

우선 p1을 eng로 변경하기로 했다. 앞으로 먹고 살려면 영어를 해야 하기 때문이다.
p2는 windows 알기로 했다. 앞으로 먹거리는 윈도우 진영으로 정했다. 리눅스도 배고픈 것은
아니지만 하드웨어 디펜던시에서 조금 벗어나고 싶기 때문이다.
p3 - C++, JAVA로 하기로 했다. 그 외의 언어는 취미로 하고.
p4 - 4자가 들어가서 버리는 프로젝트로.

p1) 윈리야그 11

시그윈 까셨으면 실행 시켜 봅시다.

그리고 gcc를 쳐 봅시다.

에러가 난다구요? 전 cygmpfr뭐시기가 없다네요.

그럼 다시 setup.exe를 실행시켜서 하기 메뉴까지 진입하세요.

K-2.jpg

위와 같이 검색해서 깔아 주시면 됩니다.

setup.exe 실행시키면 사실 다시 까는 것 같은데 설치 폴더만 같으면 기존의 정보들을 저장하고 있기 때문에
기존 파일은 keep으로 표시가 됩니다.

위 그림과 같이 검색해서 깔아주면 되요. 다른 에러도... 원래 리눅스 라이브러리는 .o, .a, .so인데
윈도우로 오면서 dll이 되어 버린거죵.

K-3.jpg
이렇게 나오면 성공~

cat > a.c 하셔서

main()
{
printf("Hello World\n");
}

쳐주고 컨트롤 D 를 누르시면 소스 작성됨.

gcc a.c

하시면

a.exe가 나옵니다.

./a.exe를 쳐서

헬로월드가 나오면 된거죠.

c:\저장하고 싶으시면

mount

하시면

c가 어디 있는지 알 수 있습니다.

저의 경우는

cd /cygdrive/c

로 들어갈 수가 있구요.

여기다가 a.c를 저장하시면 윈도우의 탐색기로 열고 C:\에 찾을 수 있습니다.

여기까정~

p1) 윈리 야그 10


밑에서 말한 시그윈을 깔아 볼께요. 초급 강좌에 맞구로....

시그윈에서 실습하는 명령어들은 실재 Vmware에서 깐 리눅스, 멀티부팅으로 깐 리눅스, 리눅스 데스크탑
, ssh로 접속한 리눅스에서와 똑같기 때문에 까는 것입니다. 사실 vmware 돌리기 무거워서 ㅠㅠ 집에서는 팽팽 도는데
시도 때도 없이 강좌 쓰려니 힘드네요.

www.cygwin.com
http://cygwin.com/install.html 가서 setup.exe를 깝니다.





뭘로 깔래 지정하는 곳입니다. setup.exe는 암것도 없어서 무조건 인터넷으로 연결해서 패키지를 받아야 합니다.
이미 받은 패키지가 있으면 괜찮구요.
K-1.jpg



어디 깔래? 다 공유할래? 뭐 아래처럼 하는게 기본이죵.
K-2.jpg


흠.. 사용자 화면이 하나 빠졌는데 그냥 다음 하시면 되요.

혹시 회사에서 까시는 분은 인터넷 인스플로러랑 프락시 같이 쓴다고 하고 집에 계신 분들은
다음과 같이 설정하면 됩니다.
K-4.jpg


서버 지정하는게 빠졌는데
요새 카이스트랑 ftp://ftp.kreonet.re.kr이 잘 안되데요.
마지막에 붙는 jp서버나 jaist로 접속하시면 빠릅니다.

다음에 나오는 건 패키지 선택화면 입니다. 깔고 싶은 것 까시면 는데요.

아래처럼 gcc 붙은거 막 클릭해 줍니다. 패키지 의존성을 알아서 선택한게 아니라 대충 devel 메뉴의 gcc 키워드 들어간거

선택했습니다. 나중에 더 깔면 되니까...

이제 쭉 진행이 되는데요. 나머진 알아서 깔아 주세요~ 영어도 열심히 하고 트러블 생기면 스스로 해결해 보아요 우리~

p1) 윈리 야그 9


리눅스 배워보고 싶은 동생이 있다고 하길래 숲을 보려면 이쪽가서 내꺼 봐라고 했더니 ㅡㅡ;

숲은 무슨 나무가 있어야 보이는데 나무가 없다고 ... 리눅스 인데 왜 언어 강좌는 없냐고

옥신각신 했습니다.

ㅎㅎ 그래서 조금은 자세히 적으려고 합니다.

그리고 사실 리눅스에서 언어 강의는 큰 의미가 없습니다. 대부분 윈도우에서도 다 돌기 때문이죠.
-예시를 들어야 자세히 적는다는 걸 보여 드릴수 있겠죵?-

1. 자바의 경우 : 자바는 똑같은 소스를 윈도우, 리눅스, 기타... 에서 돌릴 수 있습니다. virtual Machine만 바꾸어주면 되죠.
2. C의 경우 : C코드 문법은 모두 같습니다. 인클루드하는 라이브러리가 미묘하게 다를 뿐이죠.
3. C++의 경우 역시나 같아요.

물론, C#, F#언어는 리눅스에 없고 쉘 스크립트 언어는 윈도우에는 없습니다(물론, cmd 배치파일이 있긴 하지만 리눅스에 비할바는 아니죠)
ncursis는 윈도우에는 없는 라이브러리고, MFC는 리눅스에 없는 라이브 러리 입니다.

그런데 안드로이드가 리눅스 커널에 자바 기반이라고 하지만 동작 방식이 리눅스와 같지도 않고 자바 API를 다 쓸 수 있는 것도 아니예요.
즉, 다르다고도 할 수 있고 같다고도 할 수 있습니다.

마치 같기도와 같군요.(개콘 프로그램)

그리고 오래전에는 리눅스에서 윈도우 프로그램을 돌릴 때 와인을 썼었는데요. 최근에는 커널에서 가상화를 지원해주고(이름은 까먹었네요)
꼭 그런게 아니더라도 Vmware 리눅스 버전이 있습니다. 리눅스에서 윈도우 깔고 스타를 즐긴적이 있는데 사실 화면 해상도가 안 맞춰져서
조그만 화면에서 게임을 했더랬죠.

윈도우에서는 cygwin을 통해서 djgpp(철자 맞나 모르겠네요)란 언어를 쓸 수 있는데 그게 gcc 입니다. 그외에
윈도우 cmd에서 쓸 수 있는 명령어들 말고 리눅스의 강력한 유틸리티들을 쓸 수 있어서.

사실상 윈도우와 리눅스의 경계는 무너지고 있씁니다. vim.org가보시면 gvim이 아예 윈도우용으로 개발되어져서 나오는데요.

사실 리눅스에서 윈도우 프로그램 돌리는 것 보다는 윈도우에서 리눅스 프로그램을 돌리는 것이 안정적인 것을 경험할 수 있습니다.
이건 어떤 수치가 있는게 아니라 제가 쭉~ 써보니 그랬어요.

그래서 요즘엔 윈도우에 이것저것 깥아서 씁니다. 아무래도 윈도우는 공개가 되어 있지 않고 리눅스는 소스 코드가 있으니가 문제가 나오면
가상화 회사에서도 트러블슈팅이 더 빠르지 않을까 생각이 됩니다.

제가 이걸 말씀드리는 이유는 리눅스 강의를 하지만 뼛속깊이 리눅슥의 관점에서는 보고 있지 않고 늘 윈도우라는 안경을 끼고 리눅스를
보는 강의라는 것을 말씀드리고 싶어요. 정통 리눅스 강의는 아닙니다. 왜냐면 저도 한 때 리눅스를 사랑했던 사람으로서 다른 것 하고 자꾸
비교를 한다는게 죄스럽네요.

결론적으로 윈도우와 리눅스는 같이 가는 존재입니다. 리눅스 너무 강력한 툴들이 많고 소스가 대부분은 오픈이라 윈도우로 빠르게
포팅이 되고 있습니다. wingrep도 grep에 밀리지 않는 속도와 더 향상된 interface로 사랑을 받고 있습니다. 아무래도 GUI기반이라
편하죵 ^^

몇년전에 RHEL 레드헷 엔터프라이즈 리눅스 사려고 하니까 4백만원 정도했던 것 같은데 윈도우 서버랑 비교하면 많이 싼겁니다. 윈도우껀
DB도 따로 사서 써야 하는데 DB값만 해도 거시기 하니까요. 오피스도 따로 사야되고.... 뭐 기타등등.
그런데 퀄리티는 확실히 좋죠. 그래서 장단점이 있는 것 같습니다.

이제 저는 나이도 있고 해서 프로페셔널한 쪽을 선택하려다 보니 아무래도 상용쪽으로 기우는데요.

지금은 어느 진영 어느 진영 따지지 말고 그냥 모두 좋은 툴들로 생각하는 마인드를 가지려고 합니다.

앞에도 말씀드렸듯이 전문가란 한가지를 잘하기 위해 다른 걸 포기해야하는 건데요.

컴퓨터는 딱히 정해진길이 없고 내용도 너무 방대해서 그냥 닥치는 대로 공부하는게 맞는 것 같기도 합니다.

자 그럼, 리버스 엔지니어로서 배워야하지만 꼭 안해도 되는 것들 중... 어줍잖은 제가 정해드리는 툴들은.

1. 윈도우 기반의 시스템 지식 - 돈이 되니까....
2. 리눅스 기반의 시스템 지식 - 운영체제가 돌아가는 방식이 대충 어떻다 정도만 알면 될 것 같아요.
3. uC/OS-iii 마이크로 씨 오에스 쓰리라고 있는데요. 스케쥴러만 있는 커널인데 재미삼아.... 리눅스 하기 전에 보시면 좋을 것 같아요.
4. gcc4나 visual studio 2010 - 사실상 gcc 3와 gcc4는 완전 다릅니다. 아직도 서로 싸우고 있는데요. 이제는 4도 안정화 단계에 완전히 접어 들어서 4로 가시는게 맞습니다. 그리고 비주얼은 2008 버그가 많아서 2010으로 권장해 드려요.
5. 리눅스 명령어 - 강력한 툴들을 이용할 수 있으니까
6. 윈도우 파워유저의 길 - 윈도우도 강력한 기능들이 많습니다. 예를 들어서 gpedit.msc(시작-실행)만 실행해서 보안설정몇개만바꾸어도
이 명령어를 모르는 사람들은 쓰지도 못해요. 또 mstsc란 명령어가 얼마나 강력한지 모르시는 분들도 많구요. 실재로 피씨방 상대로 테스트
해 봤는데 피씨방 프로그램도 윈도우 기본 기능의 프로그램은 실수로 안 막았는데 원격으로 제어가 잘 되더라구요.

이정도 베이스 지식만있으면 중급으로 가서 좀 더 깊이 파보는데 도움이 되지 않을까 생각해요.

다음 강의 부터는 리눅스 기본 명령어 좀 알아 볼께요.

bootcamp 지우기

맥북 프로 레티나 터치바 diskutility 에서 bootcamp 파티션 삭제하면 검은색에서 회색으로 바뀐다(APFS로 지정) 파틴션 아이콘 클릭하여 - 버튼을 이용하여 삭제하면 끝.