해쉬테이블 / 해쉬맵 / 해쉬셋

http://cuteelfluv.cafe24.com/xe/etc/6283


수학관련 (그래프, 곡선방정식, 쿼터니온 등 이론 )

http://blog.naver.com/sorkelf/40151464336

Posted by 타이슨킴

테스트 사이트

http://www.regexr.com/



regular expression

 

.  : 임의의 문자로 공백도 인정됨

*  : 특정형태가 0번이상 반복

+  : 특정형태가 1번이상 반복

?  : 특정형태가 1번이하 반복

[] : 한문자의 범위를 지정

-  : 한문자의 범위를 지정할때 시작과 끝을 분리

^  : 문자열의 시작

$ : 문자열의 끝

_  : 쉼표 공백 $ ^

 

regular expression 예제

 

a.b  :  aab,acb,a b,a+b

a*   : 없음 ,a,aa,aaa,aaaa

(ab)*  : 없음,ab,abab,ababab,,

.*   : 없음, 어떤 문자열이라도 상관없음

a?bb  : bb,abb

[a-z]b : ab,bb,cb,,,zb

 

as-path에 regular 적용 예

 

^100$  :  100

100 : 100.100 200.100 200 300

^100 : 100, 100 200, 100 200 300

^100.* : ^100

^$ : 자신의 AS에서 발생시킨것

_100_ : ^100$,100,^100,100$ 를 모두포함

 

regular expression

 

.  : 임의의 문자로 공백도 인정됨

*  : 특정형태가 0번이상 반복

+  : 특정형태가 1번이상 반복

?  : 특정형태가 1번이하 반복

[] : 한문자의 범위를 지정

-  : 한문자의 범위를 지정할때 시작과 끝을 분리

^  : 문자열의 시작

$ : 문자열의 끝

_  : 쉼표 공백 $ ^

 

regular expression 예제

 

a.b  :  aab,acb,a b,a+b

a*   : 없음 ,a,aa,aaa,aaaa

(ab)*  : 없음,ab,abab,ababab,,

.*   : 없음, 어떤 문자열이라도 상관없음

a?bb  : bb,abb

[a-z]b : ab,bb,cb,,,zb

 

as-path에 regular 적용 예

 

^100$  :  100

100 : 100.100 200.100 200 300

^100 : 100, 100 200, 100 200 300

^100.* : ^100

^$ : 자신의 AS에서 발생시킨것

_100_ : ^100$,100,^100,100$ 를 모두포함

 

route-server>show ip bgp regexp _701_
BGP table version is 6457879, local router ID is 12.129.193.235
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  4.0.0.0          199.106.200.1                          0 17233 701 3356 i
*> 4.17.225.0/24    199.106.200.1                          0 17233 701 11853 64
6 6496 6496 6496 i
*> 4.17.226.0/23    199.106.200.1                          0 17233 701 11853 64
6 6496 6496 6496 i
*> 4.17.251.0/24    199.106.200.1                          0 17233 701 11853 64

Posted by 타이슨킴

binary search tree is a sorted data structure


binary search ree is already sorted.

there will be no need to waste memory or processing time sorting records



Array

Insert = O(1) +(heap allocation overhead)

Search = O(n)

Delete = O(n)


Sorted Array

Insert = O(n)

Search = O(log n)

Delete = O(n)


Linked List

Insert = O(1)

Search = O(n)

Delete = O(n)/O(1)


Sorted List

Insert = O(n)

Search = O(n)

Delete = O(n)/O(1)


Balanced Binary Tree

Insert = O(logN)

Search = O(logN)

Delete = O(logN)


Hash Table (BST) - Using a 'good' hash function

Insert = O(1)

Search = O(1)

Delete = O(1)






http://www.csee.umbc.edu/courses/undergraduate/202/spring07/Lectures/ChangSynopses/modules/m33-big-O/slides.php?print


Big-O Notation

For functions f(n) and g(n), we say that "f(n) is Big-O of g(n)" if

There exists a constant c > 0 there exists a constant n0 such that 
for all n ≥ n0, 0 ≤ f(n) ≤ c * g(n)

We write f(n) = O(g(n)), but the "=" is not the usual meaning.

The intention is to allow us to say

  • 3*n2 + 14*n - 7 = O(n2)
  • 0.0007 * n3 is not O(n2)

Technically, 101,000,000*n is O(n), but programs with that running time is still very slow. 




Arrays vs Linked Lists

Asymptotic running times for n items:

 InsertSearchDelete*
ArraysO(1)O(n)O(n)
Sorted ArraysO(n)O(log n)O(n)
Linked ListsO(1)O(n)O(n)/O(1)
Sorted Linked ListsO(n)O(n)O(n)/O(1)

*Running time for deletion from a linked list depends on whether you already have a pointer for the node to be deleted. 




Arrays vs Linked Lists

Suppose we have n items inserted and do n searches:

  • Arrays: n * O(1) + n * O(n) = O(n) + O(n2) = O(n2)

  • Sorted Arrays: n * O(n) + n * O(log n) = O(n2) + O(n log n) = O(n2)

  • Linked List: n * O(1) + n * O(n) = O(n) + O(n2) = O(n2)

  • Sorted Linked List: n * O(n) + n * O(n) = O(n) + O(n2) = O(n2)

If we have all n items before hand, we can sort them all at the same time in O(n log n), plus n * O(log n) for n searches for O(n log n) time total.

If not, we need binary search trees. 




A Binary Search Tree

For each node in a binary search tree, its left child (if any) holds a smaller number and its right child (if any) holds a larger number. 




Balanced Binary Search Trees

There are several schemes for maintaining a O(log n) height for a binary search tree n nodes: AVL trees, Red-Black trees, B-trees, 2-3 trees, ...

For such trees:

  • Insert: O(log n) time

  • Find: O(log n) time

  • Delete: O(log n) time





Hash Tables

  • Stores items in an array.

  • Uses a hash function to compute the array index of an item.

  • Ideally the size of the array is close to the number of items.

  • collision occurs when the hash function assigns the same index to two items.

  • Open hashing places items with the same index in a linked list.

  • Closed hashing finds some other place in the array for the second item that has the same index.





Hash Tables

Using a "good" hash function:

  • Insert: O(1) time (average)

  • Find: O(1) time (average)

  • Delete: O(1) time (average)

In the worst case, all items have the same hash index and a closed hash table degenerates into an unsorted array.

There are provably good hash functions.

Posted by 타이슨킴

http://smilejsu.tistory.com/612

Posted by 타이슨킴


        //■Benchmark

        //long start = Time.time;

        float n = 0;

        for (int i = 0; i < 1000000; i++)

        {

            n = (Time.deltaTime + Time.smoothDeltaTime + Time.fixedDeltaTime) * 0.333f;

        }

        xLog.i(CPlayer.me,"term1:" + n);


        n = 0;

        for (int i = 0; i < 1000000; i++)

        {

            n = (Time.deltaTime + Time.smoothDeltaTime + Time.fixedDeltaTime) / 3f;

        }

        xLog.i(CPlayer.me, "term2:" + n);

'▼ 게임개발 ▼ > 게임개발 - 프로그래밍' 카테고리의 다른 글

□ 정규표현식 테스트 페이지 링크  (0) 2015.01.08
□ Big-O  (0) 2014.12.09
□ 포물선 운동  (0) 2014.11.24
■ C# - DateTimePicker CustomFormat  (0) 2013.12.19
□ 인앱결제 보안강화 플로우  (0) 2013.11.19
□ Regular expression  (0) 2013.10.17
Posted by 타이슨킴

//현태의 날짜 정보를 핸들링   있도록 제공하는 달력 모양의 UI 컨트롤

예를 들면 매년 28.29,30.31 이런 불편함을 해소하기 위해서 DateTimePcker(=DTP) 컨트롤을 사용한다.

 

주요속성

Format

입력 받을 정보의 종류와 형식을 결정

MinDate

 

MaxDate

입력받을 날짜의 범위

Value

사용자가 선택한 날짜와 시간

ShowCheckBox

날짜 옆에 체크박스를 붙여서 날짜 자체의 유효성 검사

ShowUpDown

달력을 표시하지 않고 직접 값을 증감시킴

DropDownAlign

DropDOwn되는 달력의 정렬방법을 지정




dateTimePicker3.CustomFormat = "MMMM dd,yyyy-dddd";

dateTimePicker3.Format = DateTimePickerFormat.Custom;

TxtResult.AppendText("Custom format 출력 결과");

TxtResult.AppendText(dateTimePicker3.Text);



d

 자리 또는  자리 날짜입니다.

dd

 자리 날짜입니다 자리로  날짜  앞에는 0 옵니다.

ddd

 문자로  요일 약어입니다.

dddd

요일의 전체 이름입니다.

h

12시간 형식의  자리 또는  자리 시간입니다.

hh

12시간 형식의  자리 시간입니다 자리로   앞에는 0 옵니다.

H

24시간 형식의  자리 또는  자리 시간입니다.

HH

24시간 형식의  자리 시간입니다 자리로   앞에는 0 옵니다.

m

 자리 또는  자리 분입니다.

mm

 자리 분입니다 자리로   앞에는 0 옵니다.

M

달을 나타내는  자리 또는  자리 숫자입니다.

MM

달을 나타내는  자리 숫자입니다 자리로   앞에는 0 옵니다.

MMM

 문자로  달의 약어입니다.

MMMM

달의 전체 이름입니다.

s

 자리 또는  자리 초입니다.

ss

 자리 초입니다 자리로   앞에는 0 옵니다.

t

 문자로  A.M./P.M. 약어이며, A.M. "A" 표시됩니다.

tt

 문자로  A.M./P.M. 약어이며, A.M. "AM"으로 표시됩니다.

y

 자리 연도이며, 2001 "1" 표시됩니다.

yy

연도의 마지막  자리이며, 2001 "01" 표시됩니다.

yyyy

완전한 형태의 연도이며, 2001 "2001" 표시됩니다.


'▼ 게임개발 ▼ > 게임개발 - 프로그래밍' 카테고리의 다른 글

□ Big-O  (0) 2014.12.09
□ 포물선 운동  (0) 2014.11.24
■ 곱셈과 나눗셈 연산속도  (0) 2014.05.07
□ 인앱결제 보안강화 플로우  (0) 2013.11.19
□ Regular expression  (0) 2013.10.17
□ 기타 가물가물  (0) 2013.10.02
Posted by 타이슨킴

iOS도 인앱해킹에서 자유롭지 않습니다.


요즘 거의 모든 게임이 freemium 형태로 배포되고 있습니다.


사용자는 무료로 게임을 다운로드, 설치하여 이용할수 있고, 게임 내에서 결제를 통해 아이템 구매를 하는 방식이죠.



매출이 모두 인앱구매에서 나오기 때문에


인앱구매에 대한 해킹의 대비가 허술하면 그만큼 매출에서 손해를 보게 됩니다.




인앱구매검증시 구매결과가 담긴 영수증에 대해서 애플을 통해 한번더 조회하면 좀 더 안전한 인앱구매기능을 구현할수 있습니다.



① 사용자가 앱에서 인앱구매요청을 합니다. 앱스토어 아이디와 비밀번호를 입력하면 구매요청이 전송됩니다.



② 구매가 승인되면 애플은 해당 주문에 대한 처리결과를 보내줍니다.



대부분 이렇게 2개 단계로 인앱구매를 진행하고 승인된 주문에 대해서 해당 아이템을 게임 내에서 부여받게 됩니다.


좀 더 강화된 보안을 위해서는 전송받은 구매 결과가 유효한 결과인지, 애플서버에 한번더 조회하는 절차를 거치면 됩니다.


그리고 이 절차는 좀 더 안전하게 하기 위해 원격지의 서버를 통해 진행하는것이 좋습니다.



③ ②에서 전송받은 주문정보를 원격지의 서버로 보냅니다.



④ 원격지의 서버는 주문정보를 애플로 조회요청합니다.


이 내용은 애플 개발자 문서에도 정리되어 있습니다.


Verifying Store Receipts



⑤ 애플로부터 조회요청한 결과를 받아 해당 주문이 유효한것으로 판정되면 원격지서버는 해당 주문에 대한 처리를 합니다. 예를 들면 해당 회원의 코인이나 아이템을 지급한다던가 하는 것들이죠.



⑥ 해당 주문처리가 모두 완료되면 원격지의 서버는 해당 사용자에게 최종 처리결과를 통보하면 됩니다.



iOS에서의 인앱방지는 위와 같은 절차로 진행하시면 됩니다.


해당 기능을 도와주는 라이브러리도 이미 나와있네요


https://github.com/iosdeveloper/iAPVerification

Posted by 타이슨킴

case 0:    data.bonus_score=1;    data.bonus_coin=1;    data.start=0;             data.depth=200000;    break;

case 1:    data.bonus_score=2;    data.bonus_coin=1;    data.start=200000;     data.depth=240000;    break;

case 2:    data.bonus_score=2;    data.bonus_coin=2;    data.start=440000;     data.depth=288000;    break;

case 3:    data.bonus_score=3;    data.bonus_coin=2;    data.start=728000;     data.depth=345600;    break;

case 4:    data.bonus_score=3;    data.bonus_coin=3;    data.start=1073600;    data.depth=414720;    break;

연속된 문자열에서 특정데이터 추출을 위해,

정규표현식을 사용하여, 특정 데이터를 선택.

[replace]


insert into user_level ([level],bonus_score,bonus_coin,exp_stack,exp_section) values (\1, \2, \3, \5)


\0 은 선택된 문자열 전체.

Posted by 타이슨킴


오버로딩 시그니쳐 signature

Dangling pointer : 초기화 안 된 포인터 상수

Posted by 타이슨킴

동적 프로그래밍(Dynamic Programming)


하나의 대문제(Univ_Problem)는

여러개의 소문제(Sub_Problems)에 대한 결과값을 통해 해결한다.


이 때,

일부 소문제의 결과값을 도출하기 위해

다른 소문제의 결과값을 필요로 하는 경우가 생긴다.

(=중복되는 계산을 요구)

따라서, 하나의 소문제를 해결할 때마다, 결과값을 테이블에 저장하여,

중복되는 계산을 요구하는 경우, 테이블에서 해당 소문제의 결과값을 


divide and conquer 기법에서는

분할 객체간에는 독립성을 가지기 때문에, 필요한 경우 합치기만 하면 된다.

dynamic programming 에서는

분할 객체(소문제)간 중복되는 계산을 요구하기도 한다.



피보나치의 경우

"Fn = F(n-1) + F(n-2), (n>=2)" 의 계산에

분할 정복 방법을 적용한다면,

F(10) = F(9) + F(8) 인데

F(9)를 구하기 위해서는 다시 F(8)을 구해야 하기 때문에

중복되는 계한을 요구한다.


동적 프로그래밍에서는

소문제의 해 [ F(8) ]를 표에 저장해 놓으므로,

F(9)의 계산에 필요한 F(8)의 값을 계산후 테이블에 저장하여,

F(10)의 계산에 필요한 F(8)의 값을 요구할 때, 테이블을 참조하여

중복된 계산을 피한다.


Posted by 타이슨킴

DAO (Data Access Object)

Data에 접속하는 객체. (DataBase/파일/메모리/네트워크 등)

어떠한 저장소에 데이터를 입력하거나 조회하거나 수정/삭제 처리 담당.

VO (Value Object)

데이터의 값(Value) 그 자체.

Posted by 타이슨킴

────────────────────────────────

■[ Create a New Xcode project ]


iOS - application - OpenGL Game


Product Name : 게임이름

Organization : 아이디

Company Iden : 회사.프로젝트

->bundle : 회사.프로젝트.게임이름


데스크탑 - 프로젝트 폴더에 Create

────────────────────────────────

■[ Build ]

space -> iPhone 6.1 Simulator (Target)

Product -> Clean / Build

────────────────────────────────

■[ remove ]

AppDelegate.h

AppDelegate.m

ViewController.h ├→ move to Trash

ViewController.m

main.h

────────────────────────────────

■[ copy ] (복사시 모두체크)


□(newGroup)BayabaLib

엔진 헤더파일들


□플젝

AppDelegate.h

AppDelegate.mm

EAGLView.h

EAGLView.mm

ViewController.h

ViewController.mm

MainWindow.xib

ViewController.xib


□Suporting Files

main.m


□Frameworks

libBayabaLib.a

────────────────────────────────

■[ STL 추가 ]

플젝 선택 - Build Phases

Targets - space - Link Binary With Libraries - [ + ]

-> QuartzCore.framework [Add]

────────────────────────────────

■[ info 기본윈도우 설정 ]

Supporting Files -> 프로젝트-Info.plist -> 리스트 우클릭 Add Row

-> Main nib file base name : MainWindow

────────────────────────────────




■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■ GameMain ■■


프로젝트폴더 우클릭 - [ New Files ] - CocoaTouch - ObjectiveC Class

- Class GameMain

- Subclass of NSObject


GameMain.h

GameMain.mm (m:ObjectiveC / mm:OC+C)

생성되면 프로젝트 폴더로 이동


#import "GameMain.h"

#import "BayabaLib.h"

#define 


- GameInfo 는 삭제됨 (해당 멤버는 전역으로 사용가능)

- &배열

- BOOL

- Random : random();

#import <stdio.h>

int random(int num)

{ return rand()%num;

}

────────────────────────────────

[치환] 찾기

MyRand.nextInt -> [rand] -> ReplaceAll

private -> [      ]  -> 

System.currentTimeMillis()

timeGetTime()

────────────────────────────────


[GameMain.h]

exturn DoGame();

exturn LoadLogoData();


[ViewController.mm]

#import "GameMain.h"

SetBackGroundColor(xxxxx);

LoadLogoData();


drawFrame

{

    ClearScreen();

    DoGame();

}

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■







임시

────────────────────────────────

[ ViewController.mm ]


1. 선언부에

Sprite loho;


2. 스프라이트 로드

SetBackGroundColor( 1.0f, 1.0f, 1.0f );

logo.LoadSprite("logo.spr");


3. onDrawFrame (1/60)

drawFrame 함수에

{

logo.PutAni(240,400,0,0, FALSE);

}

────────────────────────────────

Posted by 타이슨킴


PI = 3.141592... (approximately 22/7 = 3.1428) 
radians = degress x PI / 180 (deg to rad conversion) 
degress = radians x 180 / PI (rad to deg conversion) 
 

Rad Deg Sin Cos Tan Csc Sec Cot 
.0000 00 .0000 1.0000 .0000 ----- 1.0000 ----- 90 1.5707 
.0175 01 .0175 .9998 .0175 57.2987 1.0002 57.2900 89 1.5533 
.0349 02 .0349 .9994 .0349 28.6537 1.0006 28.6363 88 1.5359 
.0524 03 .0523 .9986 .0524 19.1073 1.0014 19.0811 87 1.5184 
.0698 04 .0698 .9976 .0699 14.3356 1.0024 14.3007 86 1.5010 
.0873 05 .0872 .9962 .0875 11.4737 1.0038 11.4301 85 1.4835 
.1047 06 .1045 .9945 .1051 9.5668 1.0055 9.5144 84 1.4661 
.1222 07 .1219 .9925 .1228 8.2055 1.0075 8.1443 83 1.4486 
.1396 08 .1392 .9903 .1405 7.1853 1.0098 7.1154 82 1.4312 
.1571 09 .1564 .9877 .1584 6.3925 1.0125 6.3138 81 1.4137 
.1745 10 .1736 .9848 .1763 5.7588 1.0154 5.6713 80 1.3953 
.1920 11 .1908 .9816 .1944 5.2408 1.0187 5.1446 79 1.3788 
.2094 12 .2079 .9781 .2126 4.8097 1.0223 4.7046 78 1.3614 
.2269 13 .2250 .9744 .2309 4.4454 1.0263 4.3315 77 1.3439 
.2443 14 .2419 .9703 .2493 4.1336 1.0306 4.0108 76 1.3265 
.2618 15 .2588 .9659 .2679 3.8637 1.0353 3.7321 75 1.3090 
.2793 16 .2756 .9613 .2867 3.6280 1.0403 3.4874 74 1.2915 
.2967 17 .2924 .9563 .3057 3.4203 1.0457 3.2709 73 1.2741 
.3142 18 .3090 .9511 .3249 3.2361 1.0515 3.0777 72 1.2566 
.3316 19 .3256 .9455 .3443 3.0716 1.0576 2.9042 71 1.2392 
.3491 20 .3420 .9397 .3640 2.9238 1.0642 2.7475 70 1.2217 
.3665 21 .3584 .9336 .3839 2.7904 1.0711 2.6051 69 1.2043 
.3840 22 .3746 .9272 .4040 2.6695 1.0785 2.4751 68 1.1868 
.4014 23 .3907 .9205 .4245 2.5593 1.0864 2.3559 67 1.1694 
.4189 24 .4067 .9135 .4452 2.4586 1.0946 2.2460 66 1.1519 
.4363 25 .4226 .9063 .4663 2.3662 1.1034 2.1445 65 1.1345 
.4538 26 .4384 .8988 .4877 2.2812 1.1126 2.0503 64 1.1170 
.4712 27 .4540 .8910 .5095 2.2027 1.1223 1.9626 63 1.0996 
.4887 28 .4695 .8829 .5317 2.1301 1.1326 1.8807 62 1.0821 
.5061 29 .4848 .8746 .5543 2.0627 1.1434 1.8040 61 1.0647 
.5236 30 .5000 .8660 .5774 2.0000 1.1547 1.7321 60 1.0472 
.5411 31 .5150 .8572 .6009 1.9416 1.1666 1.6643 59 1.0297 
.5585 32 .5299 .8480 .6249 1.8871 1.1792 1.6003 58 1.0123 
.5760 33 .5446 .8387 .6494 1.8361 1.1924 1.5399 57 .9948 
.5934 34 .5592 .8290 .6745 1.7883 1.2062 1.4826 56 .9774 
.6109 35 .5736 .8192 .7002 1.7434 1.2208 1.4281 55 .9599 
.6283 36 .5878 .8090 .7265 1.7013 1.2361 1.3764 54 .9425 
.6458 37 .6018 .7986 .7536 1.6616 1.2521 1.3270 53 .9250 
.6632 38 .6157 .7880 .7813 1.6243 1.2690 1.2799 52 .9076 
.6807 39 .6293 .7771 .8098 1.5890 1.2868 1.2349 51 .8901 
.6981 40 .6428 .7660 .8391 1.5557 1.3054 1.1918 50 .8727 
.7156 41 .6561 .7547 .8693 1.5243 1.3250 1.1504 49 .8552 
.7330 42 .6691 .7431 .9004 1.4945 1.3456 1.1106 48 .8378 
.7505 43 .6820 .7314 .9325 1.4663 1.3673 1.0724 47 .8203 
.7679 44 .6947 .7193 .9657 1.4396 1.3902 1.0355 46 .8029 
.7854 45 .7071 .7071 1.0000 1.4142 1.4142 1.0000 45 .7854 
Cos Sin Cot Sec Csc Tan Deg Rad 

 

Trig Table of Common Angles
angle (degrees) 30 45 60 90 120 135 150 180 210 225 240 270 300 315 330 360 = 0
angle (radians) PI/6PI/4PI/3PI/22/3PI3/4PI5/6PIPI 7/6PI 5/4PI 4/3PI 3/2PI 5/3PI 7/4PI 11/6PI 2PI = 0
sin(a)(0/4)(1/4)(2/4)(3/4)(4/4)(3/4)(2/4)(1/4)(0/4)-(1/4)-(2/4)-(3/4)-(4/4)-(3/4)-(2/4)-(1/4)(0/4)
cos(a)(4/4)(3/4)(2/4)(1/4)(0/4)-(1/4)-(2/4)-(3/4)-(4/4)-(3/4)-(2/4)-(1/4)(0/4)(1/4)(2/4)(3/4)(4/4)
tan(a)(0/4)(1/3)(2/2)(3/1)(4/0)-(3/1)-(2/2)-(1/3)-(0/4)(1/3)(2/2)(3/1)(4/0)-(3/1)-(2/2)-(1/3)(0/4)

 

 

 unit circle picture 

Posted by 타이슨킴

파일처리 과제하면서 r+, w+ 모드에 대해 이런게 있다는 것을 넘어서 사용해 보았다.

우선 이 둘의 공통점은 r이나 w처럼 파일을 한가지 모드로 여는게 아니라 읽기 쓰기 둘 다 가능한 모드로 연다는 것이다.

그럼 차이점은?

r+의 경우 파일이 없는 경우 에러를 발생시키지만, w+의 경우 파일이 없는 경우 새로 생성한다는 점이다.

하지만 w+의 경우 기존의 파일이 존재할 경우 그 파일의 내용을 모두 지우기 때문에 기존 파일에 덧붙여서 파일에 쓰고자 할 때 문제가 된다.(참고로 a+모드도 있지만 아직 써보진 않았다.)

r+의 경우 기존의 내용이 있을 경우 기존의 내용을 지우지 않으면서 열기 때문에 기존 내용에 새로운 내용을 추가하거나 할 수 있다.

그렇다면 파일이 존재하지 않는 경우는 파일을 생성하고, 파일이 존재할 경우는 기존의 내용에 덧붙이고자 하는 상황에는?

이때는 이렇게하면 가능하다.

if ((fd = fopen("test.txt", r+)) == NULL)
     fd = fopen("test.txt",w+);

Posted by 타이슨킴

//파일읽기

FILE *fStream;

HANDLE fileSearch;  

WIN32_FIND_DATA wfd;  

fileSearch = ::FindFirstFileW(_T("다내꺼_전투일지.txt"), &wfd);


if(fileSearch == INVALID_HANDLE_VALUE) errno_t e =_tfopen_s(&fStream, _T("다내꺼_전투일지.txt"), _T("w+, ccs=UNICODE")); //없으면, 생성후 읽기쓰기

else errno_t e =_tfopen_s(&fStream, _T("다내꺼_전투일지.txt"), _T("r, ccs=UNICODE")); //있으면, 읽기만

CString resText(_T(""));

CString temp;

CStdioFile fw(fStream);

while((fw.ReadString(temp))!=NULL) //■한줄씩 전체만큼의 라인 받음.

{

temp.Delete(temp.GetLength()-1,1);

// temp = temp.Mid(temp.

resText += (temp+_T("\r\n"));

}

if(resText.IsEmpty()) resText = _T("Text Line : 45 set.\r\n")

_T("\r\n기억해야 할 것들을 적어주세요.")

_T("\r\n(입력한 내용은 자동저장 됩니다.)")

_T("\r\n\r\n\r\n")

_T("\r\n==============================================")

_T("\r\n[ U R L  Link ] www.naver.com")

_T("\r\n[ 네이버 검색 ] 영화순위")

_T("\r\n")

_T("\r\n→ URL or 찾을 키워드 적고,")

_T("\r\n→ 더블클릭(셀지정),")

_T("\r\n→ 우클릭!")

_T("\r\n\r\n 검색하기, 차암~ 쉽죠잉~?")

_T("\r\n==============================================")

_T("\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t")

_T("\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t")_T("\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t")

_T("\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t")_T("\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t");

fw.Close();


this->m_ctrlEdit->SetWindowTextW(resText);

this->ShowWindow(SW_SHOW);

Posted by 타이슨킴

DECLARE @cnt int

DECLARE @i int

 

SELECT @cnt = COUNT(*)

FROM TEST

 

SET @i = 0

 

WHILE(@i < @cnt)

BEGIN

 

 SET @i = @i + 1

END

 

혹은 SELECT 의 결과를 사용하기 위해서는 커서를 사용해야 합니다

 

DECLARE cur CURSOR FOR

SELECT id,name

FROM TEST


OPEN cur

 

DECLARE @id int

DECLARE @name varchar(50)


FETCH NEXT FROM cur INTO @id, @name

 

WHILE(@@FETCH_STATUS = 0)

BEGIN

 SELECT @id, @name

 FETCH NEXT FROM cur INTO @id, @name

END

 

CLOSE cur

DEALLOCATE cur

'▼ 게임개발 ▼ > 게임개발 - 서버+DB' 카테고리의 다른 글

다른 DB 에서 특정 데이터 가져오기  (0) 2013.01.02
ODBC 연결  (0) 2013.01.02
MSSQL server 2008 - 스케줄러(자동화)  (0) 2012.12.27
DB 튜닝이란?  (0) 2012.12.27
Posted by 타이슨킴

디비 작업을 하다보면, 다른 디비의 특정 데이터만 가져올 경우가 생긴다.

그때 유용한 기능이 디비간 연결이다.

 

 

연결 방법 - 첫번째

 

1. 'SQL Server Management Studio' 에서 연결할 서버로 접속한다.

 

2. 서버 개체 > 연결된 서버 > 오른쪽 마우스 > '새 연결된 서버' 메뉴를 선택한다.

 

3-1. 일반탭 : '연결된 서버' 에서 접속할 서버의 IP 또는 도메인을 적고 '서버유형' 에서

SQL Server를 선택한다.

 

3-2. 일반탭 : '연결된서버' 에서 별칭을 적어준다. 예를들어 'TestServer' 정도. 그리고

기타 데이터 원본을 선택 후 공급자를 'SQL Native Client', 데이터 원본을 서버의 IP 또는

도메인을 적어준다. 3-1 보다는 이 방법을 추천.

 

4. 보안탭 : '다음 보안 컨텍스트를 사용하여 연결' 을 선택한 후, 계정을 적어준다. 

 

5. 서버 옵션 : 권한을 어느 정도까지 허용할지 설정해 준다.

 

 

연결 방법 - 두번째

 

1. 쿼리 분석기를 연다.

 

2. 'sp_addlinkedserver' 로 서버를 추가한다.

 

Exec sp_addlinkedserver  
    @server = 'TestServer',     -- 추가할 링크드 서버이름
    @srvproduct = '',     -- 공백처리 (OLEDB 데이터 원본의 제품 이름)

    @provider = 'SQLOLEDB',     -- 공급자, MSSQL 

    @datasrc = '111.222.33.44',     -- 디비 경로

    @provstr='',     -- 공백처리 (연결할 특정 인스턴스의 이름)
    @catalog=''     -- 공백처리, 특정 디비를 쓰고 싶으면 적어준다.

Go

 

3. 'sp_addlinkedsrvlogin' 로 추가된 링크드 서버에 접속한다.

 

-- Exec sp_addlinkedsrvlogin '링크드서버명', 'False', Null, '아이디', '비밀번호'

Exec sp_addlinkedsrvlogin 'TestServer', 'False', Null, 'test', 'test4321' 

 

이렇게 하면 첫번째와 똑같은 설정을 할 수 있다. 좀 더 자세한 설명은 SQL 도움말을 참고.

 

 

사용 방법

 

불러오는 형식은 '디비서버명.디비명.테이블명' 이다.

예를 들면 이런 식이다.

 

- Select * From [111.222.33.44].Test.dbo.T_Test

- Select * From TestServer.Test.dbo.T_Test

[출처] [MSSQL] 디비간 연결|작성자 셰프

'▼ 게임개발 ▼ > 게임개발 - 서버+DB' 카테고리의 다른 글

프로시저 for/while/cursor  (0) 2013.01.02
ODBC 연결  (0) 2013.01.02
MSSQL server 2008 - 스케줄러(자동화)  (0) 2012.12.27
DB 튜닝이란?  (0) 2012.12.27
Posted by 타이슨킴

ODBC 연결하는 경우는 다음방법을 사용합니다.

 

Set db=Server.CreateObject("ADODB.Connection")
db.Open "DB명", "계정", "패스워드"

 

 

OLD DB 연결하는 경우에는 다음방법을 사용합니다.

 

Const DBString = "Provider=SQLOLEDB.1;Password=패스워드;Persist Security Info=True;User ID=계정;Initial Catalog=DB명;Network Address=localhost"      //여기서 localhost인부분이 만약 mssql이 사용자명으로 되어있으면 사용자명으로해야접속이됨

Set db=Server.CreateObject("ADODB.Connection")
db.Open DBString

Posted by 타이슨킴

■ 시간관련 C ■


clock_t clock(void) 은 [ CPU time ]

반환값 밀리세컨드

 

time_t time(time_t *timer) 은 [ 시스템 time ]

반환값 세컨드




time_t aclock;

struct tm *CurrentTime = NULL;


time( &aclock );

CurrentTime = localtime( &aclock );


Posted by 타이슨킴

MSSQL server 2008 - 스케줄러(자동화)


MSSQL server 에이전트

└작업 (우클릭 새작업)

     └작업명 (우클릭 속성)


----------------------------------------------

[일반]

이름                    작업명

소유자(DB계정)    계정경로

범주                    



[단계]

ㅇ새로만들기

ㅇ삽입

ㅇ편집

ㅇ삭제


단계이름  : 사용하려는 프로시저와 목적의 중간 느낌

유형        : Transact-SQL 스크립트(T-SQL)

다음계정으로 실행 : 빈칸

데이터베이스 : 프로시저가 있는 DB명(팝업리스트)

명령 : exec update_week_to_day (프로시저 명)



[일정]

ㅇ새로만들기

ㅇ선택

ㅇ편집

ㅇ제거


이름 : week_to_day

일정유형 : 되풀이    [v]사용

되풀이 : 주별

매 : 1회 (팝업리스트)


일별빈도 : (특정 시간)

시작시간 : (특정 일 이후)


----------------------------------------------



■프로시저■ 리스트중 다음작업 반복-> [ dbo.update_week_to_day ]


USE [NewChic]

GO

/****** Object:  StoredProcedure [dbo].[update_week_to_day]    Script Date: 12/27/2012 18:20:25 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[update_week_to_day]

AS

DELETE FROM score_day

insert into score_day select iden, score, reg_date, rank from score_week



'▼ 게임개발 ▼ > 게임개발 - 서버+DB' 카테고리의 다른 글

프로시저 for/while/cursor  (0) 2013.01.02
다른 DB 에서 특정 데이터 가져오기  (0) 2013.01.02
ODBC 연결  (0) 2013.01.02
DB 튜닝이란?  (0) 2012.12.27
Posted by 타이슨킴

DB 튜닝이란?


튜닝은 효율적인 SQL을 만들어 SQL문의 결과가 빠르게 나오도록 하는 것을 말합니다.

(테이블 구조 변경, 인덱스 변경 등등)

Posted by 타이슨킴

Warning 제외 선행처리 옵션

#### : 워닝 코드

- C++ 
#pragma warning(disable : ####)

- C#
#pragma warning disable 414

'▼ 게임개발 ▼ > 게임개발 - 프로그래밍' 카테고리의 다른 글

Android - 바야바엔진 - 아이폰 포팅  (0) 2013.02.27
□ sin cos TABLE  (0) 2013.02.20
● fopen() 함수에서 r+, w+ 모드의 차이 파일처리  (0) 2013.01.14
● MFC - 파일저장  (0) 2013.01.14
● 시간관련 C  (0) 2012.12.28
■ SWAP  (0) 2012.10.24
Posted by 타이슨킴





//     a = a+b;

//    b = a-b;

//    a = a-b;

//    #define SWAP(a,b) a^= b^= a^= b

//     int a = 3; b = 4;

//     SWAP(a,b);

Posted by 타이슨킴