남이섬에서 다람쥐를 봤습니다.





여친님이랑 남이섬에서 오솔길을 걷던 중에 갑자기 튀어나온 녀석입니다.

갑자기 튀어나올땐 놀랐는데, 보니까 다람쥐더라구요.

뭔가를 먹고 있는 모습이 귀엽더군요.

아무래도 이날의 포토재닉은 다람쥐가 가져간듯 하네요!

by 은빛소나기 | 2009/10/26 17:08 | Diray | 트랙백 | 덧글(1)

신세계몰 밉다 ㅠㅠ

내이름은_한글이_아니래.jpg



뭔가요 신세계몰 ㅠㅠ

이름을 부정하다니 ㅠㅠ

by 은빛소나기 | 2009/09/25 10:43 | Diray | 트랙백 | 덧글(0)

[신림 아이스베리]쟁반 빙수


언제였는지 기억이 잘안나지만 신림에 있는 아이스베리에 갔습니다.
팥빙수가 먹고싶어서요!

여자친구님(?)이랑 둘이서 가서 쟁반빙수 2인 을 시켰더니.
엄청나게 많이 나오더군요!


있을건 다있습니다!
바나나, 수박, 산딸기 파인애플, 키위 등등
거대한 아이스크림도 맛있구요.
안타깝게도 가격이 정확히 기억이 나지 않네요.
부담없는 가격대였던걸로 기억합니다.








마지막 짤로 신림 아이스베리 바깥에 있는 동상....

뭔가 정밀 묘사 되어있어요.

by 은빛소나기 | 2009/08/05 11:33 | Diray | 트랙백 | 덧글(3)

[C]알고리즘을 왜 배워야 하는가?

최근 동아리 신입생 교육에 대해서 골머리를 앓던중에 갑자기 이런생각이 들었다.

신입생들에게 과연 알고리즘을 왜 배워야하는지 설명하려면 어떻게 해야할까?

단순히 백과사전처럼 알고리즘이란

어떤 문제의 해결을 위해 컴퓨터가 사용 가능한 정확한 방법을 말한다. 알고리즘은 여러 단계의 유한한 집합으로 구성되는데, 여기서 각 단계는 하나 또는 그 이상의 연산을 필요로 한다.


이라고 설명해줘야할까?

그건 아니라고 본다. 분명히 이해도 못할 뿐더러 필요성도 못느낄것이리라는 생각이 들었다.

하여 고민중에 이런 생각이 들었다.

자 제군들 1부터 100까지 더하는 프로그램을 만들어라.

아마 대부분 다음과 같은 프로그램을 코딩할것이다.

#include <stdio.h>
#include <conio.h>

int main(){
    
     int sum, maxplus;
    
     sum = 0;
    
     maxplus = 100;
    
     for(int i = 1; i <= maxplus; i++)
             sum += i;

     printf("%d\n",sum);
    
     getch();
            
     return 0;
      
}


그러나 알고리즘을 알고 있다거나 조금 머리가 비상한 친구는 다음과 같이 코딩을 할 수도 있을 것이다.


#include <stdio.h>
#include <conio.h>

int main(){
    
     int sum, maxplus;
    
     sum = 0;
    
     maxplus = 100;

    sum = (maxplus+1)*(maxplus/2);
     
     printf("%d\n",sum );
    
     getch();
      
     return 0;
      
}


차이가 느껴지는지 모르겠다.

1부터 100까지 더하는 프로그램을 코딩할때 단순히 100번의 루프를 돌리면 간단하다.

하지만 조금더 생각해본다면 우리가 초등학교 중학교때 배웠던 방법을 응용할 수 있다.

바로 더하려는 최대값(100)의 절반값(50)이 총 최대값 + 1 만큼(101) 반복 된다는 것.

즉 1~100의 합을 구하기 위해서는 아래와 같은 식을 이용할 수 있다는 것이다.

(x/2) * (x + 1) = r
(ex: 50 * 101 = 5050)

지금 당장 이런 루틴에 머리 아프게 이런 식을 써야 하나 라는 생각을 할 수 있지만, 만약 1부터 백만까지의 수를 더해야하는 경우가 발생하다면 단순 루프의 반복보다는 계산식이 좀더 효율적일 것이다.

나는 이것이 알고리즘의 필요성을 한 절반정도 느낄 수 있게 해주리라 믿는다.

사실 알고리즘은 특정한 문제를 해결하기 위한 최적화 된 방법이기도 하지만,

어떤 문제에 부딪쳤을때 해결방법을 제시해주는 역할도 한다고 생각한다.

이 부분에 대해서는 조금 더 생각하여 쉽게 가르칠 수 있는 방법을 연구해야할것 같다.


ps1.
연산 시간에 대해서 테스트를 해봤다.
결과는 다음과 같다.



by 은빛소나기 | 2009/07/27 11:48 | Development | 트랙백 | 덧글(17)

[ASP]INPUT 배열 받아오기

종종 Form 객체에서 Input 배열을 받아야할때가 있다.

예를 들어 다음과 같은 From 구조가 존재한다고 가정하자.

<input type="text" name="temp" id="temp" value="0" />
<input type="text" name="temp" id="temp" value="1" />
<input type="text" name="temp" id="temp" value="2" />
<input type="text" name="temp" id="temp" value="3" />



위 폼 구조는 temp 라는 이름의 배열로 존재하게 되는데,
ASP에서 이 값을 폼으로 전달 받기 위해서는

Request.Form("temp")(index)의 형태로 받아와야한다.
즉 결과를 보자면 다음과 같다.

Request.Form("temp")(1) = 0
Request.Form("temp")(2) = 1
Request.Form("temp")(3) = 2
Request.Form("temp")(4) = 3


하지만 항상 Request 객체를 호출하여 값을 받아오려면 그에 따른 오버헤드가 있기 마련이다.
하여 이를 변수로 받고자 한다면, 다음과 같이 ASP 코드를 작성하면 된다.


Dim arrRequestVar

Set arrRequestVar = Request.Form("temp")

arrRequestVar (1) = 0
arrRequestVar (2) = 1
arrRequestVar (3) = 2
arrRequestVar (4) = 3

by 은빛소나기 | 2009/07/20 11:36 | Development | 트랙백 | 덧글(0)

[MSSQL] 테이블 중복검사

저장프로시저를 통해 혹은 동적 쿼리를 이용하여 테이블을 생성할 때

같은 이름의 테이블이 존재하면 에러메세지와 함께 프로그램이 종료(해당 처리가 되어 있을 경우)가 되게 된다.

이를 막기 위해서는 두가지 가정을 할 수 있는데

 

P) 같은 이름의 테이블이 존재한다면

     1. 해당 테이블을 삭제 하고 테이블을 새로 생성

     2. 해당 테이블이 있으므로 생성하지 않음

 

이런경우 우리는 쿼리를 이용하여 두가지 경우 모두를 해결할 수 있다.

 

바로

IF EXISTS()

IF NOT EXISTS()

구문이다

 

이는 해당 조건을 만족하면 실행하고 그렇지 않을경우 실행하지 않는 것인데,

이를 이용하면 동적으로 테이블을 생성할 경우 중복 테이블을 방지 할 수 있다.

 

1. 해당 테이블을 삭제 하고 테이블을 새로 생성

IFEXISTS(SELECT name
   FROM   sysobjects
   WHERE  name = N'table_name'
   AND   type = 'U')

        DROP TABLE table_name


GO

 

CREATE TABLE table_name (
<column_1, sysname, c1> <datatype_for_column_1, , int> NULL,
<column_2, sysname, c2> <datatype_for_column_2, , int> NOT NULL)

 

GO

 

 

2. 해당 테이블이 없으면 테이블을 생성함

IFNOT EXISTS(SELECT name
   FROM   sysobjects
   WHERE  name = N'table_name'
   AND   type = 'U')

        BEGIN

 

            CREATE TABLE table_name (
            <column_1, sysname, c1> <datatype_for_column_1, , int> NULL,
            <column_2, sysname, c2> <datatype_for_column_2, , int> NOT NULL)

 

        END

 
예전에 작성해둔것이었는데 이게 은근히 헷갈린다.

하여 다시 포스팅을 했다.

by 은빛소나기 | 2009/07/20 10:46 | DBMS | 트랙백 | 덧글(0)

[ASP] 저장프로시저의 CreateParameter 이용시


ASP로 웹 프로그램을 작성하다보면 보안과 관련하여 저장프로시저를 이용하게 된다.

이때 CreateParameter 를 이용하여 저장프로시저를 실행하게 되는데
(정확히는 저장프로시저 실행하기 위한 매개변수 전달을 위한 함수이다)

저장프로시저의 파라미터의 자료형에 따라 다른 상수를 적용해야한다.

그 상수표가 아래와 같다.

ps. 꽤 오래전에 어느 사이트에서 보고 워드 문서로 저장해둔것이었는데, 정확한 출처 기록이 남아있지 않다. 문제가 되면 삭제하도록 하겠다.

상수설명
adBigInt208 바이트의 부호 있는 정수(DBTYPE_I8)를 나타낸다.
adBinary128이진 값(DBTYPE_BYTES)을 나타낸다.
adBoolean11Boolean 값(DBTYPE_BOOL)을 나타낸다.
adBSTR8Null 종결 문자열(유니코드)(DBTYPE_BSTR)을 나타낸다.
adChapter136Child RowSet에서 Row를 식별하기 위해서 사용되는 4 바이트 Chapter 값(DBTYPE_HCHAPTER)을 나타낸다.
adChar129String 값(DBTYPE_STR)을 나타낸다.
adCurrency6Currency 값(DBTYPE_CY)을 나타낸다. Currency는 소수점 이하의 자릿수가 4개인 고정 자릿수이다. 이 값은 10,000으로 환산된 8바이트의 부호 있는 정수로 저장된다.
adDate7Date 값(DBTYPE_DATE)을 나타낸다. 날짜는 Double 형식으로 저장되며, 정수 부분은 1899년 12월 30일 이후의 날짜수이며 소수 부분은 하루 중 시간을 나타낸다.
adDBDate133날짜 값(yyyymmdd)(DBTYPE_DBDATE)을 나타낸다.
adDBFileTime137파일-시간 값(DBTYPE_DBFILETIME)을 나타낸다.
adDBTime134시간 값(hhmmss)(DBTYPE_DBTIME)을 나타낸다.
adDBTimeStamp135날짜-시간 스탬프(yyyymmddhhmmss에 10억분의 1초 단위가 추가된)(DBTYPE_DBTIMESTAMP)를 나타낸다.
adDecimal14고정 정밀도와 크기로 나타낸 정확한 숫자 값(DBTYPE_DECIMAL)을 나타낸다.
adDouble5배정도의 부동 소수점 값(DBTYPE_R8)을 나타낸다.
adEmpty0지정된 값 없음(DBTYPE_EMPTY)을 나타낸다.
adError1032 비트 오류 코드(DBTYPE_ERROR)를 나타낸다.
adFileTime641601년 1월 1일 이후의 1000만분의 1초 간격의 숫자를 표현하는 64 비트 값(DBTYPE_FILETIME)을 나타낸다.
adGUID72전역 고유 식별자(GUID)(DBTYPE_GUID)를 나타낸다.
adIDispatch9OLE 개체에서 IDispatch 인터페이스에 대한 포인터(DBTYPE_IDISPATCH)를 나타낸다.참고 이 데이터 형식은 ADO에 의해서 현재는 지원되지 않는다. 이 데이터 형식의 사용은 예기치 않은 결과를 초래할 수 있다.
adInteger34바이트의 부호 있는 정수(DBTYPE_I4)를 나타낸다.
adIUnknown13OLE 개체에서 IUnknown 인터페이스에 대한 포인터(DBTYPE_IUNKNOWN)를 나타낸다.참고 이 데이터 형식은 ADO에 의해서 현재는 지원되지 않는다. 이 데이터 형식의 사용은 예기치 않은 결과를 초래할 수 있다.
adLongVarBinary205Long 이진 값(Parameter 개체만 해당)을 나타낸다.
adLongVarChar201Long String 값(Parameter 개체만 해당)을 나타낸다.
adLongVarWChar203Long Null 종결 문자열 값(Parameter 개체만 해당)을 나타낸다.
adNumeric131고정 정밀도와 크기로 나타낸 정확한 숫자 값(DBTYPE_NUMERIC)을 나타낸다.
adPropVariant138자동화 PROPVARIANT(DBTYPE_PROP_VARIANT)를 나타낸다.
adSingle4단정도의 부동 소수점 값(DBTYPE_R4)을 나타낸다.
adSmallInt22 바이트의 부호 있는 정수(DBTYPE_I2)를 나타낸다.
adTinyInt161 바이트의 부호 있는 정수(DBTYPE_I1)를 나타낸다.
adUnsignedBigInt218 바이트의 부호 없는 정수(DBTYPE_UI8)를 나타낸다.
adUnsignedInt194 바이트의 부호 없는 정수(DBTYPE_UI4)를 나타낸다.
adUnsignedSmallInt182 바이트의 부호 없는 정수(DBTYPE_UI2)를 나타낸다.
adUnsignedTinyInt171 바이트의 부호 없는 정수(DBTYPE_UI1)를 나타낸다.
adUserDefined132사용자 정의 변수(DBTYPE_UDT)를 나타낸다.
adVarBinary204이진 값(Parameter 개체만 해당)을 나타낸다.
adVarChar200String 값(Parameter 개체만 해당)을 나타낸다.
adVariant12자동화 Variant(DBTYPE_VARIANT)를 나타낸다.
adVarNumeric139숫자 값(Parameter 개체만 해당)을 나타낸다.
adVarWChar202Null 종결 유니코드 문자열(Parameter 개체만 해당)을 나타낸다.
adWChar130Null 종결 유니코드 문자열(DBTYPE_WSTR)을 나타낸다.

by 은빛소나기 | 2009/07/03 11:35 | Web | 트랙백 | 덧글(2)

[MSSQL] 주문번호 등 코드를 생성하는 쿼리

종종 프로그래밍을 하다보면 코드 번호를 생성해야하는 경우가 있다.
코드번호가 거창한것이 아니라 특정 자리수의 코드를 만든다던가 날짜가 들어간 코드를 만든다던가 하는 것을 의미한다



 -- 00000000 코드 생성 쿼리
SELECT right(cast(( SELECT isnull(MAX([CODE_FIELD_NAME]),1) + 1 FROM [TABLE_NAME] ) + 100000000 as char(9)), 8)


-- 2007032500001 코드 생성 쿼리
SELECT Convert(char(8),getdate(),112) + right(cast(( SELECT isnull(MAX([CODE_FIELD_NAME]),1) + 1 FROM [TABLE_NAME] WHERE Convert(char(8),getdate(),112) = Convert(char(8),[DATE_FIELD_NAME],112) ) + 100000 as char(6)), 5)



대괄호로 묶여진 부분은 자신의 DB 환경에 맞게 수정해야하는 것으로 각각 다음과 같은 의미를 지닌다


[TABLE_NAME] : 코드를 생성할 테이블 이름
[DATE_FIELD_NAME] : 해당 테이블의 날짜 필드 이름
[CODE_FIELD_NAME] : 해당 테이블의 기 생성된 코드 필드 이름

by 은빛소나기 | 2009/07/02 16:03 | Development | 트랙백 | 덧글(2)

이번달 지름

아. 예 간만에 포스팅 한다는게 지름 포스팅이네요.

월급도 받았겠다. 요새 한동안 옷도 못샀겠다 싶어서 그냥 펑펑 질렀습니다.

간단한 케주얼 정장 느낌 나는 코디를 하고 싶어서 반팔 스프라이트 셔츠, 그레이 면바지, 운동화, 막구두, 벨트 이렇게 질렀습니다.

언제 배송올지 기대되네요!

...근데 막상 사고보니 면바지 색이 좀 아니군요. 베이지나 화이트로 갈걸 그랬네요

짤은 다음과 같습니다

by 은빛소나기 | 2009/06/25 09:16 | Fashion | 트랙백 | 덧글(3)

자미두수로 본 나

자미두수로 본 나 트랙백 해왔습니다.!

하는곳은 http://egosan.com/menu_02_1.html 이곳이구요

너무 똑같이 나오는것같아서 ㅠㅠ

생김새가 고운 사람으로 머리가 비상하고 이론적인 사람이라 힘든 노동은 맞지 않고 본인도 하지 않는다. 성격이 외골수이고 급한데 발근 했다가도 금방 풀리는 것이 특징이다. 못 배웠어도 배운 사람 못지 않게 해박하나 이 사람이 살아가는데는 학벌이 필수이고 못 배우면 평생 후회하고 고생이 많이 따른다. 대개 외동이나 중간에서 많이 보는데 맏이로 태어났다면 맏이 역할은 못하고, 늦게라도 학문이나 기술을 익혀 머리로 먹고살아야 대우받고 편하다.

이 사람은 무슨 일이든 쉽게 생각하고 시작도 잘 하는데 걱정거리나 일이 있으면 밤새 잠 못 자고 고민도 잘 하며 어떤 일은 밤을 새더라도 끝을 마쳐야 직성이 풀리는 성격이다. 남과 대화 할 때도 얼떨결에 대답은 해놓고 뒤에 흔들리며 분명히 안 되는 줄 알면서도 머뭇거리며 따라다니다 나중에 배신도 잘 당하고 후회한다. 꼼꼼할 땐 엄청 꼼꼼한데 장기적인 것은 건성이고 일도 대충대충 일단 저지르고 보는 타입이라 이것저것 손은 많이 대는데 포기도 빠르고 결과가 확실한 것이 없으니 한가지라도 끈기 있게 밀고 나가는 근성을 길러라. 임기 응변에는 능하고 사람이 착해서 남의 부탁을 거절 못하고 할 수 있는 일이나 없는 일이나 일단 대답은 잘하지만 실천력이 부족하여 지키지 못할 때가 많다. 주의 할 것은 뒤가 없기 때문에 안좋은 일도 금방 잊어버리고 같은 상황이 되면 몇 번이고 반복하는 것이 문제이니 조심하고 처음 볼때는 좀 까다롭고 쌀쌀 맞은 것 같지만 알고 보면 온화하고 착하면 정직한 사람이다. 마음이 약해서 남의 초상집에 대신 우는 사람이고 돈을 빌려줘도 모질지 못해 받을 때는 힘이 드니 돈 거래는 안하는 것이 좋다. 인색할 때는 대단히 인색하지만 쓸데없이 엉뚱한 곳에 돈을 잘쓰고 고지식한 면이 있어 한번 마음먹으면 일편단심 내 마음 같이 하지만 세상물정을 잘 몰라 남에게 당하기도 잘한다. 이 사람은 팔자에 공짜 돈이 없으니 노력한 만큼 재물을 얻고 성격은 직선적에다 자존심은 강하지만 뒤가 없다.

투기 쪽은 패가 망신하고 사업은 가급적 안 하는 것이 좋지만 만약 한다면 호텔, 백화점, 서비스업이나 현금이 바로 되는 것, 재고 남지 않는 것, 중개 도매 역할 등 바로 눈에 보이는 사업은 괜찮고 제일 좋은 것은 직장생활이나 기술분야면 더 할 나위 없다. 공부를 많이 한 사람은 교직, 학원, 방송, 관광, 광고, 연구직, 한의 쪽이 잘 맞는다.

이 사람은 무슨 일이 있으면 우선 걱정부터 하는 타입인데 성격을 대범하게 가지는 것이 좋고 가끔은 체면이 깎이더라도 목적을 이루는데 필요하면 자존심도 버릴줄 알아야한다. 남이 조금만 잘해줘도 고맙게 생각하는 사람이기는 한데 정작 자신은 상대에게 진짜 할 말도 곤란한 것은 말을 못하고 우물쭈물 하는게 흠이고 남의 말에 귀가 얇으니 주관이 약한 것이 흠이다.

공부는 오래 동안 하는 것은 잘 안되고 잠깐 잠깐씩 해야 머리에 잘 들어오며 서기로 짝수 년에 더 잘되고 시험 운도 따라준다. 이 사람에게 맞는 대학은 연고대, 경희대, 외대, 중앙대, 서강대, 인하대, 이대, 성신대 등인데 공대 쪽이면 더 좋고 학과는 신문방송, 광고, 관광 등 통역이나 가이드, 스튜어디스 가 괜찮다.

*寅,申(인,신)時생은 명예로 성공한다.
*巳,亥(사,해)時생은 부인의 주장을 따라야 순탄.

by 은빛소나기 | 2009/06/01 21:35 | Diray | 트랙백 | 덧글(3)

◀ 이전 페이지          다음 페이지 ▶