The Pursuit of Happyness

반응형

crontab -e

m h d M y [command]

#every minute
* * * * * [command]

#every hour (0 minute)
0 * * * * [command]

#@ time (12:00)
0 12 * * * [command]


반응형

반응형
10.04 에서 테스트

ROOT password setup
sudo passwd root

IP Setup
su -
vi /etc/network/interfaces

auto eth0
iface eth- inet static
address 192.168.249.100
netmask 255.255.255.0
network 192.168.249.0
broadcast 192.168.249.255
gateway 192.168.249.2

----
14.4 업데이트
다음 파일을 생성해서 아래 nameserver를 추가한다.
vi /etc/resolvconf/resolv.conf.d/tail

nameserver 8.8.8.8
nameserver 8.8.4.4
----

/etc/init.d/networking restart

PACKAGE update
sudo apt-get update

SSH server
sudo apt-get install ssh
sudo echo "UseDNS no" >> /etc/ssh/sshd_config
----
14.4 업데이트
sudo apt-get install openssh-server
----

JAVA
sudo apt-get install openjdk-6-jdk

Apache
sudo apt-get install apache2

PHP
sudo apt-get install php5

MySQL server
sudo apt-get install mysql-server

APM setup
sudo apt-get install libapache2-mod-php5
sudo apt-get install libapache2-mod-auth-mysql

sudo apt-get install php5-mysql
sudo apt-get install phpmyadmin

TOMCAT
sudo apt-get install tomcat6
sudo apt-get install tomcat6-admin


반응형

반응형

public boolean saveImage(String fileName, BufferedImage bufferedImage) throws Exception
{
File file = new File(fileName);
return ImageIO.write(bufferedImage, "png", file);
}

반응형

반응형

public String byte2HexStr(byte pByte)

{

StringBuffer sb = new StringBuffer();


for (int i = 0; i < 2; i++) {

int tInt = (pByte >> 4 * (1-i)) & 0x0f;

if (tInt > 9) sb.append((char)('A' + (tInt - 10)));

else sb.append((char)('0' + tInt));

}

return sb.toString();

}


public String byteArray2Blob(byte[] pByteArray)

{

String rv = null;

if (pByteArray != null)

{

StringBuffer sb = new StringBuffer("X'");

for(int i = 0; i < pByteArray.length; i++)

{

sb.append(byte2HexStr(pByteArray[i]));

}

sb.append("'");

rv = sb.toString();

}

return rv;

}


public String str2Blob(String pStr)

{

String rv = null;

if (pStr != null)

{

byte[] tByteArray = pStr.getBytes();

rv = byteArray2Blob(tByteArray);

tByteArray = null;

}

return rv;

}

반응형

반응형
은근히 유용한 팁

  1. Dump (Backup 및 Migration)
    [전체 Dump]

    Usage : #> mysqldump -u{userid} -p{password} DatabaseName > file_name.sql
    ex) mysqldump -uroot -proot!@# dev_db > dev_dump.sql
    [Table Dump]
    Usage : #> mysqldump -u{userid} -p{password} DatabaseName TableName > file_name.sql
    ex) mysqldump -uroot -proot!@# dev_db board > board_dump.sql
  2. 복구
    [전체 Dump 했을 경우]
    Usage : #> mysql -u{userid} -p{password} DatabaseName < file_name.sql
    ex) mysql -uroot -proot!@# dev_db < dev_dump.sql
    [Table Dump 했을 경우]
    Usage : #> mysql -u{userid} -p{password} DatabaseName TableName < file_name.sql
    ex) mysql -uroot -proot!@# dev_db board < board_dump.sql

이 자료는 negafix 님 블로그에서 퍼왔습니다. (http://negafix.tistory.com/27)

반응형

반응형
예전부터 C에서 사용하는 데이터형에 대해서 의문이 많았는데,

다른 사람이 블로그에 정리한 내용을 보고 내용이 명확해 진거 같아서 정리를 해보겠습니다..


원래 C와 C++ 에는 string 이라는 자료형이 없기 때문에,

문자열을 표현하기 위해서는 char * 형을 쓰는 것이 일반적인데,

유니코드나 utf 형식의 인코딩이 등장하며 이러한 문자열의 표현이 더욱 복잡해 지고 있습니다.


일단 위의 자료형들을 이해하기 위해서는 기본 자료형에 대해 이해를 하고 잘 끊어 읽으시면 됩니다.

먼저 기본 자료형을 살펴보면,

LP : long pointer
C : constant
STR : string
TSTR : tstring
WSTR : wstring

LP는 long pointer 를 뜻하는데, 너무 어렵게 생각하지 말고 그냥 포인터라고 생각합시다.
(컴파일러의 버전에 따라 포인터가 가리키는 데이터형이 16bits 에서 64bits 까지 왔다갔다 하지만 그냥 포인터로 생각..)

C는 constant 를 의미하며, 함수의 내부에서 인자값을 변경하지 않는다는 것이고요,

STR은 string 으로써 끝에 null 값으로 종료하는 char형 배열을 의미합니다.

위의 내용을 바탕으로 위의 자료형들을 해석해 보면,

LPSTR = long pointer string = char *
LPCSTR = long pointer constant string = const char *

그러면 과연 wstring 과 tstring 은 무엇인가 하는 것인데..

wstring 은 대충 봐도 알겠지만, wide char * 입니다.

유니코드 문자들을 표시하기 위한 데이터 타입이라고 생각하면 되고요,

마지막으로 tstring 은 무엇이냐 하면, 매크로입니다.

컴파일러에 따라 char *혹은 wchar * 로 맵핑해주는 매크로.


위의 설명은 대략 개념을 잡기 위한 것들이고,

실제로 프로그래밍 할 때에는 LPSTR 과 char * 가 완전히 같은 것은 아니기 때문에 형변환이 필요할 때에는 캐스팅을 해서 사용을 해야합니다.

그럼~
반응형

반응형
오랜만에 누가 WIPI 에서 사용하는 빌컴헤더를 물어봐서 찾아서 정리해 둠..

typedef struct {
 M_Int32  iPacketLength;    /* 패킷의 전체 길이 */
 M_Char  achApplicationID[10];  /* 단말기 애플리케이션의 Application ID */
 M_Char  achApiVersion[10];   /* API 버전 */
 M_Char  achExtVersion[10];   /* 확장 인터페이스 버전 */
 M_Char  achHandSet[10];    /* 단말기 모델명 */
 M_Char  achMin[16];     /* 단말기 전화번호 */
 M_Char  achChannel[ 2];    /* 현재 통신 중인 네트워크 */
 M_Char  achSid[ 5];     /* 통신 중인 System ID */
 M_Char  achNid[ 5];     /* 통신 중인 Network ID */
 M_Char  achBid[ 5];     /* 통신 중인 Base ID */
 M_Char  achBestPN[ 5];    /* 통신 중인 Best ID */
 M_Uint16 usDestPort;     /* 목적지 포트 번호 */
 M_Uint32 uiDestIP;     /* 목적지 IP 주소 */
 M_Uint32 iSockConnTime;    /* 소켓 연결 시각 */
 M_Char  achQoS[ 5];     /* 서비스 품질 측정 패킷 유형 */
 M_Char  achMnc[ 2];     /* Mobile Network Code */
 M_Char  achReserved[ 9];   /* 예약 영역 */
} WIPI_BILLCOMM_HEADER;
 
typedef struct {
 int   iSignature1;    /* 전송할 패킷 데이터의 헤더 구분 필드 */
 char  achContentsId[12];   /* 전송할 패킷 데이터의 과금 정보 */
 char  achChargNumber[16];   /* 과금 전화 번호 */
 int   iSMFlag;     /* 시그널 매니지먼트 플래그 */
 char  achResv [12];    /* 예약 영역 */
 unsigned int uiLen;      /* 헤더를 제외한 실제 데이터 크기 */
 char  achSignature2[ 4];   /* 전송할 패킷 데이터의 헤더 유형 필드 */
} WICGS_HEADER;
반응형

반응형
오늘은 제가 만들어서 사용하는 유용한 함수 하나를 소개하겠습니다.

PHP 로 파일 혹은 폴더를 다루는 경우 사용하는 팁인데,

특정 조건을 만족하는 파일 리스트를 받아와야 하는 경우 glob 함수를 사용합니다.

$fileLists = glob("./*/*.txt");

원래 glob 함수의 옵션에는 폴더명을 읽어오거나 하는 세팅이 정의되어 있지만 아직 제대로 지원해주지 않는다고 합니다..

따라서 파일 리스트가 아닌 폴더 리스트가 필요한 경우에는 다음과 같이 함수를 정의해서 사용하시면 됩니다.

function getFolders($rootDir)
{
$handler = opendir($rootDir);
$rFolders = array(); // 폴더 리스트
$fCounter = 0;  
while ($file = readdir($handler)) 
{
if ($file != '.' && $file != '..')
{
if (is_dir($rootDir."/".$file))
{
$rFolders[$fCounter++] = $file;
}
}
}
closedir($handler);
return $rFolders;
}

유용하게 쓰시길~
반응형

반응형
전에 이야기 한 데로 여기는 그냥 유용한 코드들에 대한 설명 형식으로 진행이 되므로,
순서가 뒤죽박죽이 될 것입니다.

오늘은 언어 인코딩에 대해서 이야기해 보겠습니다.

PHP를 사용하는 경우 APM 등을 이용하여 Apache, MySQL을 같이 사용하는 경우가 많습니다. 언제 부터인가 다국어 지원에 대한 이슈가 논의되면서 MySQL은 기본 설정이 utf-8 로 되고, 한국어를 쓰기 위해서 서버 설정을 euc-kr 등으로 변경을 해줘야 하는 번거로움이 있었습니다.

다국어를 다루는 것은 상당히 귀찮은 일입니다. ASC 부터 유니코드를 거쳐 utf-16 에 이르기까지 수많은 인코딩 방식이 있는데, 이것은 마치 메모리를 절약하기 위한 자리수 표시 방식이 밀레니엄 버그의 원인이 되었던 것처럼 효율적인 메모리 사용을 통한 지역별 언어 설정이 프로그래밍을 상당히 귀찮게 해주고 있습니다.

언어셋에 대한 부분은 나중에도 다룰 예정이므로, 오늘은 아주 간단한 form 전송시 사용이 가능한 간단한 utf-8 예제를 살펴 보도록 하겠습니다.

먼저 form 전송시에 utf-8 로 인코딩을 하기 위해서는 form 태그에서 아래와 같이 accept-charset을 utf-8 로 설정해 줍니다.

<form method=post action=target.php accept-charset='UTF-8'>


그리고 html 헤더에 다음의 코드를 삽입하게 되면, utf-8로 인코딩 된 페이지가 제대로 나타나게 됩니다.

<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>


사용에 대한 예제는 아래 페이지를 참고하시면 될 듯 하고요. 아래 페이지에서 이야기하는 서블릿상에서의 utf-8 인코딩이 바로 위의 메타태그를 사용하는 것입니다.

http://www.razorvine.net/test/utf8form/utf8pageform.html


설명을 하다보니 PHP 에 대한 내용이라기 보담은 html 에 대한 내용이 되어버렸네요..

대신 meta 태그를 위와 같이 설정하면 PHP 코드상에서의 한글 등의 문자가 깨져서 나오게 됩니다. 한글 출력시에는 iconv 를 이용해서 출력을 해주면 됩니다. 제가 쓰는 아주 간단한 인코딩 함수 입니다.

function getUTFString($str)
{
  return iconv("CP949", "UTF-8", $str);
}

이 정도의 설정만으로도 웹상에서의 다국어 지원 부분이 어느 정도 쉽게 해결이 될 것이라 생각됩니다. 나중에 AJAX 사용시에 넘겨주는 인자를 인코딩하는 방법과 결과값을 받을 때 사용하는 인코딩에 대해서 정리해 보도록 하겠습니다.

그럼~
반응형

반응형
최근에 오랜만에 웹프로그래밍 프로젝트에 참여하게 된 이후에 PHP를 계속 쓸 기회가 있어서 PHP 를 사용하는 몇가지 팁에 대해서 정리할 예정입니다. 필자 기준으로 유용한 코드들 이거나 약간 애매한 API들을 실제 적용한 사례들을 정리해보는 기회가 될 듯 합니다.

아주 기본적인 PHP 사용법에서 부터 AJAX를 응용한 사용법에 이르기까지 모든 것을 다루고는 싶으나.. 그런 것은 바이블 같은 거 사서보시고 간단하지만 유용한 코드들을 중심으로 다루게 될 것입니다.


오늘은 간단하게 PHP 소개를 하고 마치도록 하겠습니다.

필자에게 PHP란 어딘지 쉽게 접근이 가능한 웹스크립트 정도로 생각을 했었으나,
최근에는 간단한 binary 파일을 생성하는 것 까지도 PHP를 이용해서 처리를 하고 있습니다.
예전에는 MySQL과 잘 연동이 되어 편하게 사용할 수 있었는데, 
요즘은 SQLite를 이용하여 더 간단하게 DB 연동 작업을 하게되었습니다.
또한 Apache, IIS 등의 웹서버와 연동하여 웹상에서 필요한 것들을 보여주고, 
AJAX 기술을 응용하여 동적인 페이지 생성에 이르기까지 정말 광범위하게 사용이 가능한 프로그래밍 툴인 PHP의 매력 속으로 흠뻑 빠져들어가고 있습니다.

PHP 에 대한 기본적인 사항들은 아래의 사이트에서 자세한 자료를 살펴 볼수 있습니다.

www.php.net 
www.phpschool.com

오늘은 밤이 깊은 관계로 시간이 날때마다 유용한 PHP 사용 팁을 올리도록 하겠습니다.
그럼~


반응형