728x90

#ifdef#ifndef가 무엇이냐... 


우선 간단한 코드로 설명을 한번 해보겠습니다.


#define _STUDY


func() {

#ifdef _STUDY

printf("정의 되었다면...\n");

#endif


#ifndef _STUDY

printf("정의 되지 않았다면...\n");

#endif

}



ifdef 는 if define의 약자입니다. 즉 해석해보면 만약 정의되어있다면 .. 이라는 정도로 해석할수 있겠죠. 

여기선 _STUDY가 #define문으로 정의되어 있다면 아래라인부터 #endif 까지 사이의 코드가 적용됩니다.


ifndef는 not 즉 정의되어 있지 않다면입니다. _STUDY가 #define문으로 정의되어 있지 않다면 그 아래라인부터 #endif까지 사이의 코드가 적용되는거죠


위의 예제 코드는 #define으로 정의가 되어있으므로 최종적으로 코드는 


func() {

printf("정의 되었다면...\n");

}


이렇게 되어 적용된다는 겁니다. 비교적 간단합니다.


보통의 표준 라이브러리의 헤더 파일에도 이렇게 적용되어 있다 하고,,

프로젝트 파일이 커서 어느순간 자기도 모르게 동일한 헤더파일을 두번 이상 중복으로 등록한다거나 뭐 그런 경우도 있다합니다,,

뭐 이런 순간을 예방하기위해 #ifdef#ifndef등이 쓰인다고 합니다. 


거대한 프로젝트의 모든 소스를 한곳에 쓸리는 없고 나누어서 헤더파일 포함해서 서로 연결시키니 뭐 이런 잦은 실수도 일어날수 있는거겠죠..?




728x90
Posted by 정망스
,
728x90

이번글은 Sun사에서 제공하는 JDK를 설치하겠습니다. 참고로 말씀드리자면 JDK는 개발툴이며 JRE는 실행툴이라고 생각하시구요 버전은 가능한한 최신 버전을 다받아주세요.

 

설치전 서버마타 설치자(개발자)마다 설치하는 위치가 다릅니다.

제가 설치하는 서버사양및 서버 경로는 아래와 같습니다.

 

서버 OS : Cent OS 6.* 64bit형

설치경로 : /usr/local/jdk

 

우선 다운받도록 하겠습니다. 다운받으실때는 서버및 서버가 *86형태인제 *64형태인지 확인해보시고 설치하세요.

확인법은 Linux 콘솔에서 "uname -a" 하시면 됩니다.. ^^*

이제 다운받아서 설치진행하도록 하겠습니다.

여기 주소(http://www.oracle.com/technetwork/java/javase/downloads/index.html)에 접속하신후 JDK와 JRE중에 JDK를 클릭해주세요.

 

 

 

위에 JDK 다운로드를 클릭하신후 원하시는 서버타입에 맞게 다운로드를 받으세요..]

전 Linux 64비트 형태의 서버를 가지고있기때문에 http://download.oracle.com/otn-pub/java/jdk/7u10-b18/jdk-7u10-linux-x64.tar.gz 파일을 다운받았습니다.

* 주의 : 과거에는 bin파일 형태로 제공했던것 같은데, 2013년 01월에 다운받는 최신버전에서는 bin파일은 없네요. 배포판 스타일을 바꾼듯합니다... bin형식으로 다운받아서 실행했던게 아니라는거 참고하세요. ^^*

 

 

설치 순서

1. 압축풀기(다운로드 완료후)

[root@ns1 install]# tar xvfzp jdk-7u10-linux-x64.tar.gz 
jdk1.7.0_10/
jdk1.7.0_10/THIRDPARTYLICENSEREADME-JAVAFX.txt
jdk1.7.0_10/THIRDPARTYLICENSEREADME.txt
jdk1.7.0_10/lib/
jdk1.7.0_10/lib/jexec
jdk1.7.0_10/lib/javafx-mx.jar
jdk1.7.0_10/lib/visualvm/
jdk1.7.0_10/lib/visualvm/visualvm/
jdk1.7.0_10/lib/visualvm/visualvm/modules/

~~~~~~~~~~~~~~~~~~~~~~~~이하 생략~~~~~~~~~~~~~~~~~~~~~~~~

jdk1.7.0_10/man/ja_JP.UTF-8/man1/javac.1
jdk1.7.0_10/man/ja_JP.UTF-8/man1/wsimport.1
jdk1.7.0_10/man/ja_JP.UTF-8/man1/tnameserv.1
jdk1.7.0_10/man/ja_JP.UTF-8/man1/pack200.1
jdk1.7.0_10/man/ja_JP.UTF-8/man1/jcmd.1
jdk1.7.0_10/man/ja_JP.UTF-8/man1/jstat.1


 

2. 파일 압축 잘 풀렸는지 확인

[root@ns1 install]# ll

total 198208
drwxr-xr-x 8 root root 4096 Nov 28 21:10 jdk1.7.0_10
-rw-r--r-- 1 root root 96159666 Jan 11 09:25 jdk-7u10-linux-x64.tar.gz

 

3. 설치 경로 옮기기(원하시는곳에 옮기시면 됩니다. 전 /usr/local/에 옮겼습니다.)

[root@ns1 install]# mv jdk1.7.0_10/ /usr/local/jdk

 

4.설치가 완료되어서 path 지정을 한후 적용합니다. vi로 파일을 열어서 녹색으로 된것 2줄 추가해주신후 저장해주세요.

[root@ns1 install]# vi /etc/profile

마지막줄에

unset i

unset pathmunge 라고 되있는데 그 밑에 2줄을 추가해주세요.

export JAVA_HOME=/usr/local/jdk

export PATH=$JAVA_HOME/bin

 

5. path 적용및 Java 설치 확인

[root@ns1 install]# source /etc/profile

[root@ns1 install]# java -version
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

 

 

 

위와 같이 나왔다면 JDK 설치 완료되었습니다. 이제 Hadoop이 운영될수있는 기반이 마련되었습니다.

Hadoop Cluster가 수십, 수백대라면 모든 서버에 다 설치해주세요..똑같은 위치에 설치하는걸 강력히 추천드립니다.

 

감사합니다.

728x90

'하둡(Hadoop)' 카테고리의 다른 글

하둡(Hadoop)을 주목하라!  (1) 2013.10.08
hadoop에 필요한 JDK 설치전 설치여부확인하기  (0) 2013.06.14
하둡의 종류  (0) 2013.06.14
하둡 설치  (0) 2013.06.14
CDH 설정 변경이 안되는 경우  (0) 2013.06.14
Posted by 정망스
,
728x90

 안드로이드 설치가 이제는 옛날과 좀 다른 방식으로 지원되고 있습니다.

 

1. 우선은 안드로이드 개발자 커뮤니티 http://developer.android.com/index.html 에 접속합니다.

 

2. 밑에 메뉴중에 Get the SDK 를 클릭 합니다.

 

 

 3. Download the SDK 버튼을 클릭합니다.

 

4. 동의하는란에 체크하시고, 컴퓨터에 맞는 bit를 선택하신후 다운로드를 합니다.

 

5. 받은 파일을 압축을 풀어줍니다.

 

6.압축을 풀면 이클립스,sdk,sdk manager파일이 있는데요

이클립스 파일은 단순히 안드로이드와 연동되있는 이클립스이긴 한데 기존에 다른 ee버전이라던지 다른 용도로도 사용하실분들을위해 기존 이클립스에서 설치하기위해

sdk, SDK Manager 두가지만 복사해줍니다.

이 두가지를 기존에 설치되어있는 eclipse 폴더에 붙여넣기 합니다.

 

 

7. 붙여넣기를 하셨다면 이제 ADT를 설치해야합니다. 이클립스 실행하신후 Help > Install New Software을 클릭합니다.

 

8. Add 버튼을 클릭합니다.

 

9. Name은 임의로 설정하셔도 됩니다. 기본적으로 그냥 ADT설치니 ADT라고 하고

Location에 http://dl-ssl.google.com/android/eclipse를 입력하고 OK

 

10. Developer Tools 선택후 Next

 

11. 아이템들 확인하시고 Next

 

12. 동의 체크 하시고 Finish

 

13. 인스톨 되고 있습니다~.

 

14. 이건뭐야 warning 무시하시고 OK

 

15. 인스톨 완료후 재시작하라는 문구가 뜹니다. 재시작 합니다.

 

16. 간혹 이제 이부분에서 이런 화면이 뜨는분들과 안뜨는 분들이 있는데 안뜬다면 상관없지만 이 화면이 뜬다면 이클립스에서 sdk 경로를 찾지 못하고 있는겁니다.

이럴경우엔 Open Preferences를 눌러 설정으로 이동해줍니다.

 

17. 이 부분은 뭐 구글에 메시지를 보낼꺼뉘 말꺼뉘 뭐 대충 그런거 같은데 하실분들은 하고 굳이 안해도 되니 체크 해제하고 Proceed 누르시면 됩니다.

 

18. Browse 버튼을 클릭하시고 웹에서 다운받아서 아까 이클립스에 붙여넣기 해놓았던 경로로 가서 sdk 폴더를 찾아서 선택합니다.

 

19. 선택후 Apply를 클릭하여 적용하면 오류메시지가 사라집니다. OK버튼을 누릅니다.

 

20. Install new SDK 선택 하시고 Next

 

21. 이것도 그냥 yes하고 Finish 합니다.

 

22. 동의 체크하시고 Install 클릭합니다.

 

 

23. SDK 다운로드가 되고 있습니다.

 

24. 설치과 완료되면 밑에 사진처럼 SDK Manager 아이콘이 보일거에요. 기존 이클립스 하시는 분들중에 안보이시는 분들은 퍼스펙티브를 Java로 바꿔줘보세요. 그럼 보일거에요.

 

25. SDK Manager 클릭하시고 이제 안드로이드 버전들 쏵 깔아버립시다.

 

26. 동의하고 인스톨 ㄱㄱ

 

 

728x90
Posted by 정망스
,
728x90

이건 그냥 제가 다른 자료들 뒤적뒤적 거리면서 한것이기 때문에 이 방법이 우선 최선의 방법은 아니라는것을 말씀드립니다.


저도 혹시나 참고로 기록하는것이기 때문에 분명 더 좋은 방법이 있을 거에요.



흔히들 웹뷰 즉 인터넷 창이 로딩되는 동안 다이얼로그를 띄우고 싶으신 분들이 많을텐데 저는 이렇게 했습니다. 


webviewclient 안에 저렇게 스타트피니쉬 부분의 다이얼로그 함수들을 추가해주기만 하면 됩니다.


소스코드는 안드로이드 대부분 하시는분들이라면 충분히 이해하실거라 믿고 생략 하겠습니다.



728x90
Posted by 정망스
,

웹뷰 임시 정리

Android 2013. 8. 5. 17:39
728x90

# Layout

그냥 <WebView> 태그 넣고 그 안에 속성 넣어주면 끝...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
      
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
  
</LinearLayout>



# WebViewClient를 상속받은 클래스 정의

WebViewClient 클래스를 상속받아 구현합니다. 이 안에 shouldOverrideUrlLoading() 메소드를 구현하지 않으면 웹뷰 내 링크 터치할 때 연결 프로그램(기본 브라우저, 크롬 등) 설정창이 뜹니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import android.webkit.*;
  
class WebBrowserClient extends WebViewClient {
      
    /*
     * 웹뷰 내 링크 터치 시 새로운 창이 뜨지 않고
     * 해당 웹뷰 안에서 새로운 페이지가 로딩되도록 함   
     */
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}



# WebView 객체 생성 및 세팅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import android.webkit.*;
  
public class MainActivity extends Activity {
  
    private WebView webView;
  
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // 웹뷰 설정
        webView = (WebView)findViewById(R.id.webView);
          
        WebSettings webSettings = webView.getSettings();
        webSettings.setUseWideViewPort(true);
        webSettings.setSupportZoom(true); // 줌 서포터 표시
        webSettings.setBuiltInZoomControls(true); // 멀티터치 줌 지원
        webSettings.setJavaScriptEnabled(true);
          
        webView.setWebViewClient(new WebBrowserClient());
  
        // 웹뷰에 웹 사이트 표시
        String url = "http://www.ldoceonline.com";
        webView.loadUrl(url);
    }
}



# WebView 초기화 방지 

화면 회전시 웹뷰가 초기화되지 않도록 합니다. 액티비티 클래스 안에 onConfigurationChanged() 메소드를 구현합니다.

1
2
3
4
5
6
7
8
9
/*
 * 화면 회전시 화면이 초기화되버리는 문제 방지
 * 매니페스트 액티비티 속성에
 * android:configChanges="orientation|screenSize"
 * 추가 필요
 */
public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);
}

반드시 매니페스트 파일에 다음과 같이 액티비티 속성을 추가해야 합니다. 

1
2
3
4
5
<activity
    android:name="com.heroism.webviewapp.MainActivity"
    android:configChanges="orientation|screenSize"
    android:label="@string/app_name" >
</activity>



# 뒤로가기 

액티비티 클래스 안에 onKeyDown() 메소드를 구현하면 back 키를 눌렀을때 이전 페이지를 보여주도록 할 수 있습니다. 이때 canGoBack() 메소드로 이전 페이지로 이동할 수 있는지 판단한 후 goBack() 메소드를 호출하여 이전 페이지를 보여줍니다.

첫 페이지 상에서 back 키를 연속으로 두 번 터치하면 앱을 종료시키게 할 수 있습니다. 이 코드는 이곳(http://hyvaa.tistory.com/97) 을 참고했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 핸들러, 플래그
private Handler mHandler;
private boolean mFlag = false;
  
// 핸들러 객체 설정 (onCreate() 메소드 안에 구현!!!)
mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if(msg.what == 0) {
            mFlag = false;
        }
    }
}
  
public boolean onKeyDown(int keyCode, KeyEvent event) {
       
    // 백 키를 터치한 경우
    if(keyCode == KeyEvent.KEYCODE_BACK){
           
        // 이전 페이지를 볼 수 있다면 이전 페이지를 보여줌
        if(webView.canGoBack()){
            webView.goBack();
            return false;
        }
           
        // 이전 페이지를 볼 수 없다면 백키를 한번 더 터치해서 종료
        else {
            if(!mFlag) {
                Toast.makeText(this, "'뒤로' 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();
                mFlag = true;
                mHandler.sendEmptyMessageDelayed(0, 2000); // 2초 내로 터치시 
                return false;
            } else {
                finish();
            }
        }
    }
       
    return super.onKeyDown(keyCode, event);
}

 

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침