'IT'에 해당되는 글 24건

우분투/민트 크롬 뛰어쓰기 버그 수정방법, 한글 설정 방법

IT/Linux/Unix


우분투 크롬 브라우저에 한글 뛰어쓰기 버그가 있다.

뛰어쓰기 하거나 글 마지막에 "."을 붙여서 사용했었는데 번잡하고 불편하다.


이참에 수정해보기로 한다.


우분트/민트 크롬의 뛰어쓰기 버그는 한글입력기를 uim으로 바꾸면 현상이 없어진다.

uim으로 바꾸도록 해보자.



우분투/민트 한글 설정 uim


먼저,

sudo apt-get install uim uim-byeoru

명렁어로 패키지 설치.


시스템-언어설정에서 

uim 선택 후 재부팅을 해보자.


잘되는 지 확인 후, 안된다면 시스템바에 아이콘 트레이가 나와있는지 확인.

없다면, 

sudo apt-get install uim-switch 

명렁어로 패키치 추가 설치.


패키지가 설치되면 터미널로 uim-switch 실행 후,

uim-systray 선택, 재부팅 후 트레이 및 잘 동작하는지 확인한다.



uim은 기본적으로 언어 설정이 shift-space인데, 

uim-byeoru 인터페이스를 이용해 개인에게 편한 방법으로 변경하도록 하자.



vim 흑백 컬러에서 색상 설정하기.

IT/Linux/Unix



vim에서 색상이 흑백인 경우가 있는데 이럴때,


:syntax on


을 해주면 색상이 나타난다.


vim에서 해주면 일회성이고. 홈디렉토리에서 .vimrc파일에 위 명령어를 써주면 일회성이 아닌,


해당 사용자가 vim을 사용할때마다 색상이 셋팅되어사용할 수 있다.





Node.JS 장점과 단점, 비동기방식에 대해서

IT/Node.Js


Node.JS 공부를 시작하며 하나하나 정리를 하며 남겨볼 요령으로 다시 티스토리 블로그에 남겨보도록 한다.

참고한 책은 "모던 웹을 위한 Node.js프로그래밍"이다.



Node.JS는 기존 브라우저에서만 사용하던 javascript를 서버에서도 사용 할 수 있도록 한 획기적인 프로그램이다.  javascipt언어 하나가지고 클라이언트와 서버까지 프로그래밍을 할 수 있다니!!, Node.JS의 장점 중 하나라 할 수 있겠다. 


또한 Node.JS는 기존 대규모 네트워크 프로그래밍 방식인 스레드 방식이 아닌 이벤트 방식으로 동작한다고 한다. 기존 스레드 방식은 규모가 커지고 처리해야할 일들이 많아지면 서버의 사양에 따라 처리능력이 달라지고, 많은 비용이 들어가는 반면, Node.JS는 단일 스레드로 처리하기 떄문에 대규모 네트워크 처리에 적합하다고 한다. 이 또한 장점 중하나이다. 그러나, 단일 스레드인 Node.JS가 장점이 될 수도 있지만, 단점이 될 수도 있는데 단일 스레드로 동작하기 때문에 하나가 오류가 난다면 프로그램 전체가 오류가 생기는 단점이 있다. 


또 다른 단점은 javascript가 발전하여 속도가 빨라졌다고는 하나 C나 C++보다 속도가 빠르진 않다. 또한 Node.JS는 아직 1.0버전 조차 발표가 되지 않은 상황이라고 한다. 프로젝트에 Node.JS를 도입할 때 꺼려지는 이유중 하나 일 수도 있겠다.



제목에 명시한 비동기 방식은, 위에 장점에서 언급한 단일 스레드와 관련이 있는데, javascipt의 이벤트 바인딩 처럼 동작하는 것을 말한다. 즉 이벤트 기반 비동기식 방식이라 말하며 이벤트가 발생하면 어떤 행위를 하는 것이다.

vim plugin, 주석처리에 유용한 플러그인

IT/개발 노트

nerdcommenter



https://github.com/scrooloose/nerdcommenter

위 사이트에서 다운 받은 후,


홈에 .vim/plugin 폴더에 플러그인 파일을 복사시켜준다.


이후 vim에서 \c + 스페이스로 주석처리 가능.



#if, #else, #endif에서 주의해야할점!

IT/C 언어




몇일전 코드를 수정하다가, 아래와 같은 C언어 문법을 사용해야했다.

조건에 따라 컴파일을 포함시킬지 않알지 정하는 문법.


#if

~~

#else

~~

#endif



그러나 수정코드를 삽입하였지만, 원하는 결과는 볼 수 없었다.

조건문과 로직에는 이상이 없었다.


그렇게 한참을 디버그.. 뻘짓 하다가 뒤늦게 깨달았다.


결론, 기본적으로 빠트린 것이 있었는데.. 

#if문에서 #defined되어 있지 않은 변수명을 사용해도 소용이 없다.

이게 가장 중요한 부분인데 예를들어 보도록 하자.


예를 들어, 


op_val = 1;

#if op_val

~~~~

#else

~~~~

#endif


해서 항상 false로 인식해 #if문 아래 코드를 수행할 수 없다.


이쯤되면 이미 알아차리는 분들도 계실 수 있고, 아직 눈치채지 못하신 분들이 있으실 수 있다.


바로 컴파일 순서가 답이다. 위와 같은 예제는 항상 false로 갈 수밖에 없는데,

전처리기 컴파일 순서는 전역변수와  #defined을 먼저 컴파일하게 되어있다.


#if의 조건을 보면, op_val이란 변수는 매크로함수나 defined으로 정의되어 있지 않다.

그렇기 때문에  #if문은 항상 false를 가지며 참일때 코드로 분기할 수 없게 되는 것이다.

그렇기 때문에, op_val=1이라는 코드는 아직 컴파일 되지 않아 값이 없는 변수가 된다.


참 간단한 것이지만, 아직 기본적인것이 헤깔리거나 몰라서 이렇게 헤메는 경우가 허다한것 같다.

하나씩 기록해나가면서, 깨우쳐보도록 하자.






자바스크립트의 위치 선정, head or body?

IT/JAVAscripts



자바스크립트의 선언 위치는 HTML 문서의 <head>…</head> 또는 <body>…</body> 안쪽이어야 하며 이 밖의 위치에 선언하는 경우 HTML 문법 오류가 됩니다. HTML 문법이 허용하지 않는 위치에 자바스크립트 코드를 작성하면 표준에 따라 엄격하게 구현된 브라우저에서는 자바스크립트를 해석하지 못할 수도 있습니다. 자바스크립트 코드를 HTML 문서에 직접 포함하는 방법도 있지만 별도의 *.js 파일로 분리하여 HTML 문서에서 불러오는 방법도 있습니다.

자바스크립트를 <head>…</head>에서 불러오기

별도의 자바스크립트 파일을 <head>...</head>에서 불러오는 XE 템플릿 문법은 다음과 같습니다.



   <!--%import("xxx.js”)-->  

       또는

   <load target=”xxx.js” /> 



실행 결과는 다음과 같습니다.



    <head>
        <script type=”text/javascript” scr=”xxx.js”></script>
    </head>



웹 브라우저가 화면 표시를 끝내기 전에 자바스크립트로 사용자 화면의 일부 콘텐츠를 보여주거나 감추는 동작을 실행한다면 자바스크립트 코드는 HTML 문서의 <head>…</head> 위치에 포함하는 것이 좋습니다. 이런 경우 자바스크립트 코드를 <body>…</body>에 포함했을 때 자바스크립트가 HTML보다 늦게 해석이 되면서 일시적으로 깨진 화면이 보일 수 있습니다. <head>…</head>에 포함된 자바스크립트는 HTML 문서보다 먼저 해석이 되지만 HTML 문서의 로딩이 완료된 이후에 실행하도록 코드를 작성해야 합니다.


출저 : http://www.xpressengine.com/userForum/19302357

IPC, 공유메모리 생성 함수 shmget()

IT/C 언어

함수 원형 int shmget(ket_t key, size_t size, int shmflg);


■헤더파일

#include <sys/ipc.h>

#include <sys/shm.h>


shmget함수는 인자의 키값을 갖는 공유메모리의 식별자를 리턴한다. 

새로 생성된 공유메모리는 입력된 사이즈와 같은 크기의 공유메로리를 생성하게 된다. 


shmget()함수 인자

shmget함수는는 3개의 변수를 인자로 가진다. 

  1. ket_t key는 생성하고자 하는 공유메모리의 key값으로 key_t형이며 정수로 입력할 수 있다. 그리고 IPC_PRIVATE로 인자로 가질 경우 프로세스의 개인적인 공유메모리를 생성한다.
  2. size_t size는 생성하고자 하는 공유메모리의 크기이다.
  3. int shmflg는 공유메모리의 flg값으로 이 공유메모리의 권한과 생성시 옵션을 줄 수가 있다.IPC_CREAT와 숫자 권한을 or연산으로 입력 받는 경우가 대다수이며, IPC_CREAT옵션을 줄 경우 없다면 입력된 키값의 공유메모리가 있다면 새로성성하지않고 참조하며, 없다면 입력된 권한으로 새로 생성한다. 그와 반대로 IPC_EXCL 인자로 줄경우 이미 생성된 공유메모리가 있다면 함수를 실패하고 error를 반환한다.


■ 리턴값

함수가 성공시 공유메모리의 식별자를 반환하며, 실패시 -1을 리턴하고 errno를 셋팅한다.


■사용예제

공유메모리를 만드는 간단한 예제를 살펴보도록 하겠다.


임의적으로 key값을 주고 256의 크기를 갖는 공유메모리를 생성하는 코드를 작성했다.

만약 성공시 공유메모리 id 값을 찍을 것이고, 실패시 실패 매세지를 출력할 것이다.


컴파일하고 프로그램을 실행시켰다.


결과는,

shmid : 61538306을 갖는 공유메모리가 생성 되었다.

공유메모리가 생성 되었는지는 터미널에서 ipcs 혹은 ipcs -m을 입력시 볼 수 있다.


위 사진을 보면 shmid 61538306이고 256bytes를 갖는 공유메모리가 생성 되었음을 볼 수 있다.


좀 더 자세한 사항은

$man shmget 시에 살펴 볼 수 있다.



IPC, 메세지 큐 생성 msgget() 함수

IT/C 언어

함수원형 int msgget(key_t ket, int msgflg)


헤더파일.

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/mgs.h>


msgget 함수key 인자 값에 연관된 메세지 큐 식별자를 반환한다. 

key의 인자로 특수한 경우로 IPC_PRIVATE를 인자로 넘겨 줄 수 있는데, 이 같은 경우는 프로세스의 개인적은 큐를 생성하고 프로세스만 이용 할 수 있도록 하는 경우이다. 


msgflg의 인자는 9개의 권한을 셋팅하는 것인데 IPC_CREAT와 해당 권한을 OR 연산으로 넘겨 줄 수 있다. IPC_CREAT를 인자로 넘겨 줄 경우 이미 메세지큐가 생성되어 있다면 무시한다. IPC_EXCL는 이미 생성된 큐가 있을 시 -1을 리턴하고 ,errno 변수에 값을 세팅한다. 

IPC_CREAT와 IPC_EXCL과 권한은 전부 OR연산으로 인자에 입력 할 수가 있다.


리턴 값

성공시 메세지 큐의 식별자 값이 반환되고, 그외 경우 -1을 반환하며 errno에 해당 에러 값이 셋팅된다.


간단한 사용 예를 살펴보자.

생성된 큐는 명령어 

$ipcs -q 시 생성된 메세지 큐 list를 볼 수 있다.


자세한 사항은 

$man msgget 시 살펴 볼 수 있다.


Unix/Linux ps -ajx 명령시 프로세스 상태stat 컬럼

IT/Linux/Unix


3개의 필드로 구성되어 프로세스 상태를 보여준다.


첫 번째 필드
D                  io와 같이 중지(interrupt)시킬 수 없는 잠자고 있는 (휴지) 프로세스 상태
R                  현제 동작중이거나 동작할 수 있는 상태
S                  잠자고 있지만, 중지시킬수 있는 상태
T                  작업 제어 시그널로 정지되었거나 추적중에 있는 프로세스 상태
X                  완전히 죽어 있는 프로세tm
Z                  죽어 있는 좀비 프로세스

 두 번째 필드
<                  프로세스의 우선 순위가 높은 상태
N                  프로세스의 우선 순위가 낮은 상태
L                  실시간이나 기존 IO를 위해 메모리 안에 잠겨진 페이지를 가진 상태
s                  세션 리터(주도 프로세스)
I                   멀티 쓰레드
+                  포어그라운드 상태로 동작하는 프로세스



IPC, 메세지 큐에 대한 좋은 참고자료 주소.

IT/개발 노트


IPC, 메세지 큐에 대한 자세한 설명과 예제가 나와있는 사이트 주소.


참고 하기 좋다.


http://www.cs.cf.ac.uk/Dave/C/node25.html

RSS FEED
이웃추가