">

*  Ubuntu 14.04 LTS, JDK 1.6 버전으로 테스트 하였음.


- Oracle 홈페이지에 접속해서 시스템에 맞는 JDK 버전 다운로드.

  (ex.sudo chmod +x jdk-6u45-linux-x64.bin)


- 해당 bin 파일이 실행 속성이 없는 경우. 실행 속성 부여

 $ sudo chmod +x jdk-6u45-linux-x64.bin


- bin 파일 실행

$ ./jdk-6u45-linux-x64.bin


- 하위 디렉토리 생성 확인

$ ls

  ...

  jdk1.6.0_45/
  ...


- JDK 디렉토리 위치(/usr/lib/jvm/) 변경

(jvm 디렉토리가 없는 경우 수행 -> $ mkdir -p /usr/lib/jvm  )

$ sudo mv jdk1.6.0_45/ /usr/lib/jvm/jdk1.6.0_45/


- Java 설치

$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_45/bin/javac 1


$  sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_45/bin/java 1


$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_45/bin/javaws 1


- 설치된 Java가 Default가 되도록 설정 변경(기존에 다른 Java가 설치되어 있던 경우)

$ sudo update-alternatives --config javac

$ sudo update-alternatives --config java

$ sudo update-alternatives --config javaws


- 정상적으로 설치 되었는지 버전 확인

$ java -version


- 심볼릭 링크 생성

$ cd /usr/lib/jvm

$ ln -s /usr/lib/jvm/jdk1.6.0_45/ java



- Java 환경 변수 설정

$ vi ~/.bashrc

...

#JAVA ENV
export JAVA_HOME=/usr/lib/jvm/java
export PATH=$JAVA_HOME/bin:$PATH

...






Posted by 깡's
,

Java JDK Release 버전(지난 [이전 및 최신] 버전) 별 다운로드 페이지
-

http://www.oracle.com/technetwork/java/archive-139210.html



Posted by 깡's
,

* 주석 - '<!--' 과 '-->' 로 감싸면 된다.

  eg.> <!-- 주석 내용 -->


* 출력 관련 태그

 + <p> ~ </p>

  - paragraph. 글의 단락을 표시 할 때 사용한다. 자동으로 줄바꿈과 공란이 생긴다.

  즉, <p> 태그 후 2줄 뒤에 글이 표시된다.


 + <br> or <br/>

  - break. <p>와 다르게 바로 다음줄에 출력하기 위해 사용한다.


 + <h1> ~  </h1> ; <h6>까지 있다.

  - heading. 웹 페이지의 머릿글을 쓸때 사용한다. 숫자가 작을 수록 크게 표시된다.


 + <pre> ~ </pre>

  - previously formatted text. 입력한 내용(공백 및 줄바꿈 포함)을 그대로 출력하기 위해 사용한다.


 + <center> ~ <center>

  - 가운데 정렬을 할 때 사용한다.

 

 + <blockquote> ~ </blockquote>

  - 인용 문단을 표시할 때 사용한다.

 

 + <address> ~ </address>

  - 보통 E-mail을 나타낼 때 사용하는 것이 목적으로 주로 해당 문서를 만든 사람의 서명, 주소, 이름을 나타낼 때 쓰인다.


 + <hr> or <hr/>

 - horizontal line. 수평선을 출력한다.

  > 속성

    ; size="n" - 수평선의 두께 설정. (n은 픽셀수)

    ; width="n" - 수평선의 너비 지정. (n은 픽셀수)

    ; align="s" -  정렬 방법 지정 (s는 center/left/right 중 선택)

    ; noshade - 음영 효과 제거



* 텍스트 서식 (브라우저에 따라 효과가 다르거나 없을 수 있음)

 + <b> ~ </b> : Bold. 굵은 글씨.

 + <i> ~ </i> : italic. 기울어진 글씨.

 + <u> ~ </u> : underline. 밑줄 표시.

 + <tt> ~ </tt> : Typewriter. 타자 기체.

 + <blink> ~ </blink> : Blink. 글자 깜빡임

 + <sub> ~ </sub> : subscript. 아래첨자.

 + <sup> ~ </sup> : superscript. 위첨자.


 + <string> ~ </strong> : 강조 표시. 브라우저마다 차이가 있지만 보통 굵은 글씨로 표시된다.

 + <em> ~ </em> : emphasized. 강조 표시.

 + <code> ~ </code> : 타이핑되었을 때 서식.

 + <dfn> ~ </dfn> : definition. 용어 정의 서식.

 + <cite> ~ </cite> : citation. 부분 인용 서식.

 + <kbd> ~ </kbd> : keyboard. 사용자 키보드 입력.

 + <samp> ~ </samp> : sample. 예제 서식.

 + <var> ~ </var> : 변수 이름 서식.


* 특수 문자

 - &nbsp;

  : non-breaking space. 공백 문자 한개를 의미. 문서내에서 사용수만큼 공란이 생성.

 - &lt;

  : less than. '<'을 나타낸다.

 - &gt;

  : great than. '>'을 나타낸다.

 - &quot;

  ; quote. 큰 따옴표(")를 나타낸다.

 - &amp;

  ; ampersand. '&'를 나타낸다.

Posted by 깡's
,

기본적으로 생기는 시스템 아이콘의 리소스 이름은 IDR_MAINFRAME이며, 프로젝트명.ico 파일을 가리키고 있다.

리소스 뷰에서 아이콘은 편집할 경우 프로그램의 좌측 상단의 아이콘은 변경될 지 모르지만, 실행 파일의 아이콘까지 변경되지 않는 경우가 있다.

 

간단하게 실행 파일의 아이콘을 변경하고 싶은 경우 다음과 같이 해보자.

 

1. 우선 변경하고 싶은 아이콘 파일을 만들어서 두자. (아이콘 생성 툴을 사용하여...)

- MyXXX.ico

 

2. 해당 프로젝트의 xxx.rc 파일을 열어본다. (xxx는 프로젝트 이름)

파일을 열어보면 상단 쪽에 ICON 관련 부분이 있는데 이 부분을 변경하면된다.

(가급적 프로젝트는 닫고 하자...)

 

IDR_MAINFRAME ICON "res\\xxx.ico"

 

xxx.ico ...이 것을 1 과정을 통해 만든 파일 명으로 변경 후 저장하면 끝이다.

 

IDR_MAINFRAME ICON "res\\MyXXX.ico"

 

3. 프로젝트를 다시 빌드해보자. 실행 파일의 아이콘이 변경된 것을 볼 수 있다.

 

Posted by 깡's
,

다이얼로그 기반에서는 시스템 메뉴를 등록하고, 'ON_UPDATE_COMMAND_UI' 메시지 맵을 이용하여 함수를 사용할 경우 (CCmdUI* pCmdU) 인자를 이용하여

pCmdUI->Enable(xxx);
pCmdUI->SetText(xxx);

와 같이 속성을 변경시켜도 변경 사항이 적용되지 않는다. [Enable(FALSE)의 경우 GRAY 처리되지는 않지만 실제로 사용은 안되긴한다.] 이 사항은 MFC 설계시 의도된 사항이라 한다. 속성을 변경 시키려면 다음과 같이한다.

 

1. 메뉴를 사용하는 다이얼로그를 클래스뷰에서 선택하여 속성 창에서 메시지 'WM_INITMENUPOPUP'을 오버라이딩하여 'OnInitMenuPopup()'함수를 생성한다.

 

=> 자동으로 메시지 맵에 'ON_WM_INITMENUPOPUP()' 이 등록되며 해당 다이얼로그 클래스에 멤버 함수가 추가된다.

 

 

2. 오버라이딩된 OnInitMenuPopup()의 내용을 모두 주석 처리하고 다음 내용을 입력한다.

void CxxxDlg::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu)
{
    ASSERT(pPopupMenu != NULL);
    // Check the enabled state of various menu items.

    CCmdUI state;
    state.m_pMenu = pPopupMenu;
    ASSERT(state.m_pOther == NULL);
    ASSERT(state.m_pParentMenu == NULL);

    // Determine if menu is popup in top-level menu and set m_pOther to
    // it if so (m_pParentMenu == NULL indicates that it is secondary popup).
    HMENU hParentMenu;
    if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)
        state.m_pParentMenu = pPopupMenu;    // Parent == child for tracking popup.
    else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL)
    {
        CWnd* pParent = this;
           // Child windows don't have menus--need to go to the top!
        if (pParent != NULL &&
           (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL)
        {
           int nIndexMax = ::GetMenuItemCount(hParentMenu);
           for (int nIndex = 0; nIndex < nIndexMax; nIndex++)
           {
            if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu)
            {
                // When popup is found, m_pParentMenu is containing menu.
                state.m_pParentMenu = CMenu::FromHandle(hParentMenu);
                break;
            }
           }
        }
    }

    state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
    for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
      state.m_nIndex++)
    {
        state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
        if (state.m_nID == 0)
           continue; // Menu separator or invalid cmd - ignore it.

        ASSERT(state.m_pOther == NULL);
        ASSERT(state.m_pMenu != NULL);
        if (state.m_nID == (UINT)-1)
        {
           // Possibly a popup menu, route to first item of that popup.
           state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
           if (state.m_pSubMenu == NULL ||
            (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
            state.m_nID == (UINT)-1)
           {
            continue;       // First item of popup can't be routed to.
           }
           state.DoUpdate(this, TRUE);   // Popups are never auto disabled.
        }
        else
        {
           // Normal menu item.
           // Auto enable/disable if frame window has m_bAutoMenuEnable
           // set and command is _not_ a system command.
           state.m_pSubMenu = NULL;
           state.DoUpdate(this, FALSE);
        }

        // Adjust for menu deletions and additions.
        UINT nCount = pPopupMenu->GetMenuItemCount();
        if (nCount < state.m_nIndexMax)
        {
           state.m_nIndex -= (state.m_nIndexMax - nCount);
           while (state.m_nIndex < nCount &&
            pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID)
           {
            state.m_nIndex++;
           }
        }
        state.m_nIndexMax = nCount;
    }
}

 

 

참고 site] Visual C++ 대화 상자에 있는 메뉴 연결되어 있으면 해당 명령 사용자 인터페이스 처리기가 메뉴 항목의 상태를 변경할 수 없습니다.

http://support.microsoft.com/kb/242577

Posted by 깡's
,

 

PuTTY-0.60h.setup_kor.exe

Posted by 깡's
,

Visual Basic 6.0, Visual C++ 6.0 및 Visual Source Safe 6.0d용 서비스 팩 6

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=A8494EDB-2E89-4676-A16A-5C5477CB9713

Posted by 깡's
,

타겟용으로 alsa 라이브러리 및 유틸리티를 빌드하고 alsamixer를 실행 했을 때 다음과 같은 메시지가 출력되고 실행되지 않으면

- Error opening terminal: vt100.

alsa 라이브러리(alsa-lib) 컴파일을 위해 같이 크로스컴파일한 ncurse 라이브러리 중 터미널 파일의 위치가 잘못되어 있거나 타겟용 파일 시스템에 포함되지 않았기 때문이다.

그러므로 alsa 라이브러리를 컴파일하기 위해 크로스컴파일을 한 ncurse의 라이브러리를 찾아보면 대략 share/terminfo 라는 디렉토리를 찾을 수 있다. 이 디렉토리를 타겟용 파일시스템에 포함한 후 다음과 같이 환경 변수를 등록하고 실행해본다.

export TERMINFO=/usr/share/terminfo             
                                                                    #/usr/share/terminfo에 넣은 경우...

위의 환경 변수는 로그인시 바로 실행되도록 ~/.bashrc, etc/profile 등의 시작 스크립트에 등록하면 편하다.

Posted by 깡's
,

* 커널 메시지 출력 함수 - printk()
; 커널 메시지를 출력하는데 사용. 사용 형식은 printf()와 동일하며 반드시 메시지 끝에 개행 문자('\n')를 붙여줘야한다.메시지 출력은 콘솔 창으로 바로 출력되는 것이 아니라 원형 큐 형식의 커널 로그 버퍼에 저장된다.

* 로그 버퍼 출력 방법
1. # dmesg
- 커널 메시지는 이러한 커널 메시지를 관리하는 2개의 데몬(klogd, syslogd)에 의해 '/var/log/mesage'에기록되는데 이 메시지는 쉘에서 dmesg 명령을 통해 콘솔에 출력된다.

2. /proc/kmsg 확인
- 커널의 상태 정보를 가지는 /proc 디렉토리의 kmsg를 cat 명령으로 확인하면 된다.
 
  ex> # cat /proc/kmsg

<참고 - 리눅스 디바이스 드라이버(한빛미디어)>

Posted by 깡's
,

우분투는 기본적으로 Root 계정을 제공하지 않는다. root 계정이 필요한 명령은 귀찮더라도 'sudo 명령' 형식으로 사용해야 한다. 하지만 너무너무너무너무(x∞) 귀찮을 경우 다음과 같이 한다.

1. root의 비밀번호를 설정한다.
$ sudo passwd root
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: 암호를 성공적으로 업데이트했습니다.

2. root 계정으로 전환한다.
$ su root
암호:

cf> '$ sudo -s' 도 동일함.

3. 'sudo'는 버리고 이제 걍 쓴다...
$ reboot (x)
$ sudo reboot (o)
# reboot (o)

끝;;;;

cf) 기존의 쉘에서 root 권한의 쉘로 이행한 것이기 때문에 'exit' 명령을 사용하면 복귀됨...ㅇㅇ;

'Operating System > Linux Admin' 카테고리의 다른 글

파일 묶음(tar) 및 압축(gzip, bzip2)  (0) 2012.01.27
Posted by 깡's
,