Monthly Archives: April 2010
어떤 모바일 단말에 뛰어들어야 하나요?
요새 확실히 모바일이 대세이긴 대세다. 수 많은 포탈들에서도 모바일 지원을 천명하고 있고
(g 모사에서는 CEO가 향후 g모사의 핵심은 모바일 이라고 외치기도 하셨고) 그렇다면 과연
모바일에 운명을 걸고자 하는 사람들은 과연 어디로 뛰어들어야 할까?
플랫폼도 다양하다. 아이폰, 안드로이드, 곧 나올 윈도우모바일7 까지(나머지 플랫폼들도 있지만,
현재는 이 3개의 임팩트가 가장 강하다. 미안하다. 심비안아!!!)
결론부터 말하자면, 현재 돈을 벌고자 한다면, 한국에서는 무조건 아이폰이다!!!
위에서 “현재 돈을 벌고자 한다면” 을 강조한 이유는 단 한가지이다.
아이폰 이외에는 일반 개발자가 돈을 벌기는 힘들기 때문이다.
기본적으로는 벌지 못한다고 생각하면 된다. 분명히, 그럼 다른 플랫폼을 무시하는 것이냐고
한다면, 이유는 간단하다. 현재 한국 소속으로는 안드로이드와 MS앱스토어에 유료 어플을
올릴 수 없다!, 오직 가능한 곳은 아이폰의 애플앱스토어 뿐이다.
현재 구글 안드로이드 마켓에서는 미국 주소지의 신용카드가 있어야만 paymant account(유료계정)
을 등록할 수 있다. 현재 한국에서는 유료 어플의 다운로드 자체도 가능하지가 않다.
MS도 마찬가지이다. 아직 윈도우 모바일 7폰 자체도 안나왔을 뿐더러, MS스토어도 아직 활성화 되지
않았다. 활성화 되더다로 한국의 순서는?
그렇다면, 아이폰이 무조건 해답인가? 그건 아니다. 실제로 위의 세 플랫폼 모두에서 유료등록과
상관없이 돈을 벌 수 있다. 그건 벅스나, 소리바다 처럼, 웹 사이트등에서 매달 결제하게 하고,
해당 유료 등록자만, 서비스를 들을 수 있게 하는 방식을 택하면 가능하긴 하다. 그러나, 1인 개발자가
이런 방식을 하기는 힘들지 않을까 싶다.
간단하게 각 플랫폼의 특성을 정리해보면 다음과 같다.
| 아이폰 | 안드로이드 | 윈도우모바일7 | |
| 주체 | 애플 | 구글 | MS |
| 주언어 | Objective-C | Java | C#(Siverlight, XNA) |
| 장점 | 1. 동일한 하드웨어 2. 유료 마켓 활성화 |
1. 소스 공개 2. 멀티태스킹 |
1. 기본적으로 아이폰을 닮아감! 2. 하드웨어 기본 사양 강제 |
| 단점 | - 아이패드로 인해서 동일한 하드웨어가 깨졌음 - 부분적 멀티태스킹으로 힘듬 |
- 다양한 하드웨어가 존재 | - 유료 OS |
뭐, 간단하게 이런식이지만, –_- 결론은 HTML5가 짱일 것이라는 허망한 결론이 나온다.
하나로 다양한 플랫폼이 커버가 되니, 하드웨어 종속적인 기능이 필요한 경우가 아니라면
몇년 내로 HTML5가 대세이지 않을까?
mysql simple example
간단한 mysql 관련 샘플
#include <stdio.h>
#include <mysql.h>
#include <errno.h>
#include <string.h>
int main( int argc, char *argv[] ){
MYSQL mysql;
mysql_init(&mysql);
if( !mysql_real_connect( &mysql, "localhost", id, pass, dbname, 3306, NULL, 0 )){
printf("%sn", mysql_error(&mysql));
return 1;
}
printf("Mysql Connectedn");
MYSQL_RES *result;
MYSQL_ROW row;
char sql[256];
strcpy( sql, "select * from tbl_user_info" );
if( mysql_query( &mysql, sql ) != 0 ){
printf("query fail: %sn", mysql_error(&mysql));
mysql_close(&mysql);
return 1;
}
result = mysql_store_result( &mysql );
int nCount = mysql_num_rows( result );
while( (row = mysql_fetch_row( result ) ) != NULL ){
printf("%s %s %sn", row[0], row[1], row[2] );
}
mysql_free_result( result );
mysql_close(&mysql);
return 0;
}
mysql 기본 셋팅
db 생성
mysqladmin create db_name
user 생성, 권한 부여
grant all privileges on db_name.* to id@localhost identified by ‘password’ with grant option;
( 예전에는 insert into 로 db, user 를 추가해줘야 했는데, 그럴 필요가 없다.)
flush privileges;
Ubuntu iptables 설정 방법
가져오기
localhost:/etc# iptables-save > iptables.rules
저장하기
localhost:/etc# iptables-restore < iptables.rules
샘플
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp –dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp –dport 80 -j ACCEPT
-A INPUT -p udp -m udp –sport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp –dport 80 -j ACCEPT
-A INPUT -j DROP
코드 스니핏 – urlencode, urldecode 샘플
갑자기 필요해졌는데 –_-, 괜찮은 소스코드가 없었다.
그렇다고 내가 만든건 아니고 qDecoder 에서 decode 부분을 –_-( qDecoder에서는 한글이 인코딩이 안되네) 또 어디에서(어디더라, ) encode 부분을 가져와서 간단하게 인터페이스만 살짝 바꾼 버전이다.
고로 –_- 아무것도 내가 한건 없다라고 보면 될듯
MAC에서는 NSString 이 기본적으로 해주는데, c 쪽은 다 직접 해줘야 한다라는 –_-
#include <stdio.h>
#include <string.h>
#include <memory.h>
static const unsigned char hexchars[] = “0123456789ABCDEF”;
char *url_encode(char const *s, int len, int *new_length)
{
register unsigned char c;
unsigned char *to, *start;
unsigned char const *from, *end;
from = s;
end = s + len;
start = to = (unsigned char *) malloc(3 * len + 1);
while (from < end) {
c = *from++;
if (c == ‘ ‘) {
*to++ = ‘+’;
#ifndef CHARSET_EBCDIC
} else if ((c < ’0′ && c != ‘-’ && c != ‘.’) ||
(c < ‘A’ && c > ’9′) ||
(c > ‘Z’ && c < ‘a’ && c != ‘_’) ||
(c > ‘z’)) {
to[0] = ‘%’;
to[1] = hexchars[c >> 4];
to[2] = hexchars[c & 15];
to += 3;
#else /*CHARSET_EBCDIC*/
} else if (!isalnum(c) && strchr(“_-.”, c) == NULL) {
/* Allow only alphanumeric chars and ‘_’, ‘-’, ‘.’; escape the rest */
to[0] = ‘%’;
to[1] = hexchars[os_toascii[c] >> 4];
to[2] = hexchars[os_toascii[c] & 15];
to += 3;
#endif /*CHARSET_EBCDIC*/
} else {
*to++ = c;
}
}
*to = 0;
if (new_length) {
*new_length = to – start;
}
return (char *) start;
}
/**
* Decode URL encoded string.
*
* @param str a pointer of URL encoded string.
*
* @return the length of bytes stored in str in case of successful, otherwise returns NULL
*
* @note
* This modify str directly. And the ‘str’ is always terminated by NULL character.
*/
static char _x2c(char hex_up, char hex_low)
{
char digit;
digit = 16 * (hex_up >= ‘A’
? ((hex_up & 0xdf) – ‘A’) + 10 : (hex_up – ’0′));
digit += (hex_low >= ‘A’
? ((hex_low & 0xdf) – ‘A’) + 10 : (hex_low – ’0′));
return (digit);
}
int url_decode(char *str, char *target, int size) {
char *pEncPt, *pBinPt, *pTarPt;
if (str == NULL || target == NULL || size == 0 ) {
return 0;
}
pBinPt = str;
pTarPt = target;
for(pEncPt = str; *pEncPt != ”; pEncPt++) {
if( (pTarPt – target) >= size )
{
pTarPt–;
break;
}
switch (*pEncPt) {
case ‘+’: {
*pTarPt++ = ‘ ‘;
break;
}
case ‘%’: {
*pTarPt++ = _x2c(*(pEncPt + 1), *(pEncPt + 2));
pEncPt += 2;
break;
}
default: {
*pTarPt++ = *pEncPt;
break;
}
}
}
*pTarPt = ”;
return (pTarPt – target);
}
int main()
{
int i, n;
unsigned char dest[256] = {0×00,};
unsigned char test[256] = {0×00,};
char *pTarget;
unsigned char *str[] = {
“안녕하세요”,
“hello world 안녕하세요n”,
“hello%20world%20%be%c8″,
“A B C D E F G”,
NULL
};
int count = 0;
char *pDest = str[count];
while( NULL != pDest){
printf(“Original : %d %srn”, strlen(pDest), pDest);
pTarget = url_encode(pDest, strlen(pDest), NULL);
printf(“encode : %d %sn”, strlen(pTarget), pTarget);
n = url_decode(pTarget, test, 256);
test[n] = 0;
printf(“decode : %d %sn”, n, test);
free(pTarget);
count++;
pDest = str[count];
}
return 0;
}
총체적 위기?
막무가내로 시작한 방통대 대학원 생활,
이번 학기에 수강한 과목이 패턴 인식과 이러닝 시스템이다. –_-
그러나, 어느 하나도 만만한 과목이 아니다.
특히, 이러닝은 학습의 내용이 대부분 암기과목이라(텀이 힘들긴 하지만) 그래도
괜찮은 편이지만, 패턴 인식의 경우는 완전히 수학과목인데,
문제는!!!
수식이 하나도 이해되지 않는다. 왜 이런것인지…… 현재의 내 머리로 도저히 이해가 안간다
쉬운거 하나하나도 남들보다 뒤쳐지는 상황인지라, 봐도봐도 딴나라 말로 들리는 것을
어떻게 해야하는지… 에휴… 그래도 해보는 수밖에, 올해는 아마도 F 2개를 볼것같지만…
성적이 중요한게 아니라, 내가 이 과목을 제대로 이해하는지가 가장 중요한 상황이다.

