2012년 11월 16일 금요일

tcp/ip application protocol (for assignment)


어플리케이션 프로토콜
 
server
client로부터 좌표정보 8bytes를 받아서 3 X 3 배열에 추가한다.
이겼는지 졌는지 승부가 아직 안 났는지 판단한다.
1. 승부가 아직 안 났다면
->자신의 좌표를 결정(어디에 O를 그릴 것인지)한다. (결정하는 알고리즘)
3 X 3 배열에 추가한다.
[O][  ][  ]
[X][  ][  ]
[X][O][  ]

여전히 승부가 아직 안 났다면 client에게 결과를 전달 (표)
server가 이겼다면 client에게 결과를 전달(표, 졌음)
 
2. 승부가 났다면(client가 이겼다면)
->client에게 결과를 전달(표, 이겼음)
 
client
server에 접속해서 n1, n2 의 (n=1,2,3) 정보를 전달한다.(8bytes)
 
struct a {
int n1;//x좌표
int n2;//y좌표
}
 
server로부터 정보를 받는다.(표, 이겼음, 졌음)
승부가 아직 안 났다면 다음 좌표를 입력받는다.
승부가 났다면 정보를 출력한다.
 
컴퓨터(Server player)가 자신의 좌표를 결정하는 알고리즘
http://ko.wikipedia.org/wiki/%ED%8B%B1%ED%83%9D%ED%86%A0
1. 일렬로 만들어야 이긴다.(가로, 세로, 대각선)
2. 컴퓨터는 일렬로 놓으려고 한다. 하지만 client가 돌 하나를 더 놓았을 때 server가 지게 된다면 그곳에 돌을 놓는다.

2012년 9월 29일 토요일

[C] queue


#define QUEUESIZE 256 //size변경하면서 테스트 해볼 것
#define TRUE 1
#define FALSE 0


typedef struct{
  int q[QUEUESIZE+1];
  int first;
  int last;
  int count;
} queue;

/*큐에 대한 함수(circular queue)*/
void init_queue(queue *q) //큐 초기화
{
  q->first = 0;
  q->last = QUEUESIZE-1;
  q->count = 0;
}

void enqueue(queue *q, int x) //큐에 값을 저장하는 함수
{
  if (q->count >= QUEUESIZE)
    printf("Warning: queue overflow enqueue x=%d\n", x);
  else{
    q->last = (q->last+1) % QUEUESIZE;
    q->q[ q->last ] = x;
    q->count = q->count+1;
  }
}

int dequeue(queue *q) //큐에서 값을 빼오는 함수
{
  int x;

  if(q->count <= 0) printf("Warning: empty queue dequeue.\n");
  else{
    x = q->q[ q->first ];
    q->first = (q->first+1) % QUEUESIZE;
    q->count = q->count - 1;
  }

  return(x);
}

int empty(queue *q) //큐가 비었는지 확인하는 함수, 비었으면 TRUE리턴
{
  if(q->count <= 0) return(TRUE);
  else return(FALSE);
}
/*큐에 대한 함수 끝*/

[C] pthread in window

http://taycleed.tistory.com/97
http://blog.naver.com/PostView.nhn?blogId=melipion7&logNo=20091502431&viewDate=&currentPage=1&listtype=0

이틀간의 삽질 끝에 내린 결론 : 그냥 처음부터 리눅스를 쓰는게 좋다...

2012년 9월 8일 토요일

2012년 9월 4일 화요일

[OS] multitasking

▶ 멀티태스킹(Multitasking)



멀티태스킹이란 동시에 여러 개의 프로세스들이 운영될 수 있는 능력입니다. 윈도우 는 다중 프로세싱을 수행하기 위한 두 가지 방식을 사용합니다. 이 방법이란 협력 멀티태스킹(Cooperative Multitasking) 과 선제 멀티태스킹(Preemptive Multitasking)을 말합니다.

윈도우3.1 용 16비트 프로그램을 실행할 때는 협력 멀티태스킹이 사용됩니다. 협력 멀티태스킹은 시스템에서 수행되고 있는 프로세스들간을 스위칭함으로써 가능합니다.

예를들어 협력 멀티태스킹 중에 어떤 프로세스가 CPU를 필요로 한다면 필요한 시간을 알리기 위해 대기 행렬(Queue :큐) 에 메시지를 제출할 것입니다. 통제에 사용되는 프로세스는 어떤 다른 프로세스가 통제가 필요한지를 알아보기 위해 정기적으로 대기행렬을 확인합니다. 이 때 메시지가 확인되면, 이 통제 프로세스는 실행을 중단하고 다른 프로세스가 실행을 시작합니다. 이러한 접근의 문제점은 언제 프로세스가 대기 행렬을 체크할 것인가에 대한 일정한 표준이 없다는 것입니다. 그 결과로 어떤 프로그램은 다른 프로그램이 5내지 10초당 한번꼴로 체크하는데 비해 1초당 수회를 체크해야 합니다. 그러면 몇몇 프로세스들은 보다 많은 CPU 시간을 사용해야 합니다.

멀티태스킹의 다른 방식인 선제 멀티태스킹은 보다 강력하고 진보된 것입니다. 이 유형의 멀티태스킹에서 운영체제는 CPU를 보다 적절히 사용합니다. 이 방식은 응용 프로그램이 CPU를 점유하고 있다하더라도 운영체제가 제어권을 가지고 다른 응용 프로그램이나 시스템 프로세스에게 CPU를 할당해 줄 수 있는 방식입니다. 윈도우에 의해 특별하게 만들어진 32비트 응용 프로그램은 이 유형의 멀티태스킹으로 많은 이익을 얻게됩니다. 운영체제 스스로가 CPU 시간을 결정하기 때문에 16비트 응용 프로그램이 실행될 때 발생하던 오버헤드(Overhead) 는 더 이상 발생하지 않습니다. 32비트 프로그램을 사용하는 것이 좀더 간편합니다. 그리고 프로세스 제어기에 의해 과거의 방식보다 CPU 시간이 각 프로세스들에게 공평하게 할당되기 때문에 응용 프로그램들은 보다 자연스럽고 안전하게 작동합니다.


출처 : http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=104&docId=156736&qb=Y29vcGVyYXRpdmUgbXVsdGl0YXNraW5n&enc=utf8&section=kin&rank=2&search_sort=0&spq=0&pid=RZUgE35Y7tlssteI7wZssc--094609&sid=UEXTmyrDRVAAABR6EdA

2012년 8월 21일 화요일

[C++ STL] heap

1. max heap

// range heap example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main () {
int myints[] = {10,20,30,5,15};
  vector<int> v(myints,myints+5);

  make_heap (v.begin(),v.end());
  cout << "initial max heap : " << v.front() << endl;

  pop_heap (v.begin(),v.end()); v.pop_back();
  cout << "max heap after pop : " << v.front() << endl;

  v.push_back(99); push_heap (v.begin(),v.end());
  cout << "max heap after push: " << v.front() << endl;

  sort_heap (v.begin(),v.end());

  cout << "final sorted range :";
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];

  cout << endl;

return 0;
}

Output:
initial max heap   : 30
max heap after pop : 20
max heap after push: 99
final sorted range : 5 10 15 20 99


2. min heap

#include <functional>
#include <vector>
#include <algorithm>

make_heap(v.begin(), v.end(), greater<int>());
sort_heap(v.begin(), v.end(), greater<int>());

잡다한 정보들


eclipse가 잘 되다가 안될 때
http://blog.naver.com/youmitu?Redirect=Log&logNo=6013355360

효과적인 구글검색방법
http://boribab.tistory.com/3297
http://killereco.tistory.com/28

입력버퍼 비우는 법
http://plustag.tistory.com/1
난 scanf는 자동으로 버퍼 비워주는 줄 알았는데.. 지금까지 잘못알았다. 늘어가는 삽질
fflush함수는 gcc표준으로는 출력버퍼를 비우는 것

http://blog.naver.com/PostView.nhn?blogId=chamsol79&logNo=140010284718&parentCategoryNo=6&viewDate=&currentPage=1&listtype=0


깨알같은 윈도우 단축키

http://youni.biz/technote01/board.php?board=tag&command=body&no=348&PHPSESSID=a6c769576dac3dc12ca7d8af0c9768dc


인터넷 익스플로러 사용할 때 딸깍 거리는 소리, 이어폰 끼면 거슬리는데 없애는 법
http://blog.naver.com/dalsapcho?Redirect=Log&logNo=20133956172


MIPS instruction 정리
http://blog.naver.com/kain_hoon?Redirect=Log&logNo=140012329014

li
move
http://en.wikibooks.org/wiki/MIPS_Assembly/Pseudoinstructions

MIPS wiki
http://en.wikipedia.org/wiki/MIPS_architecture



c++ Reference
http://www.cplusplus.com/reference/

mysql 권한 설정 (http://iplusu.tistory.com/292)
Windows에서 첫 설치시 암호를 설정하게 되면 root@localhost로 로그인할 권한이 없다면서 서비스 시작시 Error 1045를 내 뱉는다.
검색결과 재설치를 하는것이 가장 좋은 방법이라고들 하지만 다른 방법도 있다는 것을 적고싶다.

우선 cmd 창을 열고 mysql 서비스를 중지시킨다.

>> net stop mysql
여기서 에러가 나면 관리옵션의 서비스에서 직접 종료시킨다.

비인증로그인이 가능하도록 mysql을 다시 실행시킨다.

>> mysqld --skip-grant
>> mysql -uroot mysql

이제 비밀번호가 없어도 root 권한으로 mysql을 사용할 수 있다.
mysql DB를 열고 암호를 재설정한 뒤 권한을 부여한다.

>> use mysql;
>> update user set password=PASSWORD('1111') where user='root';
>> flush privileges;
>> grant all on *.* to 'root'@'localhost' identified by '1111' with grant option;
>> flush privileges;
>> exit

이제 mysql을 다시 재실행시키면 정상적으로 작동한다.


C++ map example
http://blog.newms.org/41

C++ iterator
http://blog.naver.com/dntjd207?Redirect=Log&logNo=90138446903



아침부터 해상도 때문에 삽질

"Got this error if my device resolution doesn't fit my PC screen.
For example my laptop resolution is 1366x768.
- WVGA800 (480x800) - OK
- WXGA800 (800x1280) - fail (failed to allocate memory)"

AVD 만들 때 램과 해상도를 고려

200개의 단계별 예제로 배우는 안드로이드 4.0 자료 링크
http://www.androidside.com/bbs/board.php?bo_table=823&wr_id=90