조회 수 12768 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

6월 18일경 아침까지 잘돌아가던 내 하드가

저녁에 퇴근해서 켜보니 부팅되지 않았다.

머가 잘못된 건지 BIOS setup에 들어가서 확인해보았더니, DVD도 인식이 되지 않았다.

둘다 고장났나~ 아님 메인보드가 나갔을까...

일단 전원을 내리고 하드디스크 SATA2 케이블을 뽑고 다시 전원을 켜고 BIOS 설정에 들어가서 확인해보았다.

다행이 DVD는 잡히네~

이런~ 그럼 하드디스크가 나갔나보네~ 이런이런 구입한지 5개월도 안되었는데 벌써 나가버리다니..

제조사는 시xxx 였는데, A/S도 그렇고 앞으론 국내제품을 구입해서 써야겠다라고 맘먹었다.

A/S 하는데 시간이 좀 걸릴 것 같아서 1 테라바이트 용량의 하드를 구입했다.

어제 하드가 도착했으며, 기존하드는 친구한테 A/S 부탁하고~

움트트~

이건 얼마나 갈까나~  emoticon


Cpp
2009.06.16 17:38

unix_timestamp 구현 in C ?

조회 수 50902 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

C로 1970년 1월 1일이후 흐른 시간을 초로 변환해보자.

그리고, unix timestamp를 일시로 변환해보자.

중간에 summer time(daylight-saving) 제가 1987, 1988년에 한번씩 있었다.

앞으로 서머타임이 발생하면 is_daylight_saving을 수정해 줘야한다.

time 라이브러리를 이용하면 쉽게 구할 수 있지만 라이브러리가 없으면 직접 구현해야지머~

#include <stdio.h>
#include <stdlib.h>

#define SECONDS_PER_1NORMALYEAR 31536000ul
#define SECONDS_PER_1DAY    86400UL
// prototypes
unsigned char gl_get_last_day(unsigned int, unsigned char);
unsigned int gl_get_days(unsigned int, char, char);
unsigned char gl_is_leapyear(int);
long GetTimestamp(unsigned int year, char month, char day, char hour, char min, char sec, char offset);
long GetDatetime(long timestamp, char offset, unsigned int *pyear, char *pmonth, char *pday, char *phour, char *pmin, char *psec);

/*--------------------------------------------------------
@function: gl_get_last_day
@description
    인자로 넘겨받은 년도(uiYear)와 월(ucMonth)를 이용하여
    달의 마지막 일수를 구하는 함수이다.
@arguments:
    - uiYear: 년도 [1, N)
    - ucMonth: 월  [1, 12]
@return value: 마지막 일수
@written by Jeong-soo, Kim (wittgens@gmail.com)
@history
    - 2009-06-25, 최초 생성
--------------------------------------------------------*/
unsigned char gl_get_last_day(unsigned int uiYear, unsigned char ucMonth)
{
    switch(ucMonth) {
        case 2: // 2월
            if( (uiYear % 4) == 0 ) {        // 4로 나누어 떨어지는 해는 윤년임.
                if(uiYear % 100 == 0) {    // 그중에서 100으로 나누어 떨어지는 해는 평년임
                    if(uiYear % 400 == 0) return 29; // 그중에서 400으로 나누어 떨어지는 해는 윤년임.
                    return 28; // 평년
                }
                return 29;    // 윤년
            }
            return 28;    // else 평년
        case 4: case 6: case 9: case 11: // 4, 6, 9, 11월
            return 30; // 30일
    }

    return 31; // 그외 31일
}

/*--------------------------------------------------------
@function: gl_get_days
@description
    년, 월, 일을 입력으로 그 해의 1월 1일 부터
    그 해의 월,일까지의 일수를 구하는 함수 이다.
@arguments:
@return value: 마지막 일수
@written by Jeong-soo, Kim (wittgens@gmail.com)
@history
    - 2009-06-25, 최초 생성
--------------------------------------------------------*/
unsigned int gl_get_days(unsigned int year, char month, char day)
{
    unsigned int days;
    int i;
    days = 0;
    for(i=1; i<month; i++) {
        days += gl_get_last_day(year, i);
    }
    days += day;
    return days;
}

/*--------------------------------------------------------
@function: gl_is_leapyear
@description
    인자의 년도가 윤년인지 판단하는 함수이다.
@arguments:
@return value:
    1: 윤년임
    0: 평년임
@written by Jeong-soo, Kim (wittgens@gmail.com)
@history
    - 2009-06-26, 최초 생성
--------------------------------------------------------*/
unsigned char gl_is_leapyear(int year)
{
        // 년도가 4로 나누어 지고 100으로 나누어 지지 않거나,
        // 400으로 나누어 지면 윤년임.
    return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}

/*--------------------------------------------------------
@function: get_seconds
@description
    - year, month, day, hour, min, sec를 인자로함.
    - 1년 1월 1일부터 year년 month월 day일 hour시 min분 sec초까지
      흐른 시간을 초단위로 구한다.
@arguments:
    year: 년도[1,65535], month: 월[1, 12], day: 일[1, 31]
    hour: 시[0, 23], min: 분[0, 59], sec: 초[0, 59]
@return value: 
    초단위로 환산한 값
@written by Jeong-soo, Kim (wittgens@gmail.com)
@history
    - 2009-06-25, 최초 생성
--------------------------------------------------------*/
static unsigned long get_seconds(unsigned int year, char month, char day, char hour, char min, char sec)
{
    unsigned int leap_year_count;
    unsigned long seconds;

    // 윤년의 개수를 구한다.
    leap_year_count = (year-1) / 4; // 윤년 개수
    leap_year_count -= ((year-1) / 100); // 100으로 나누어 지지 않는 것
    leap_year_count += ((year-1) / 400); // 400으로 나누어 지는것

    // 년도에서 윤년의 개수를 빼어 초로 환산한다.
    seconds = (year - 1 - leap_year_count)*365*SECONDS_PER_1DAY;

    // 윤년만 초로 환산하여 위에서 계산한 초를 더해준다.
    seconds += (leap_year_count)*366*SECONDS_PER_1DAY;

    // year년의 month월, day일까지 일수를 구하여 초로 환산하여 이전값에 더해준다.
    seconds += (gl_get_days(year, month, day)-1)*SECONDS_PER_1DAY;

    // hour시 min분 sec초를 초로 환산하여 더해준다.
    seconds += hour*3600 + min*60 + sec;
    return seconds;
}

/*--------------------------------------------------------
@function: is_daylight_saving
@description
    * 1987-05-10 00:00:00 ~ 1988-10-10 22:59:59
    * 1988-05-08 00:00:00 ~ 1988-10-08 22:59:59
@arguments:
@return value: 
@written by Jeong-soo, Kim (wittgens@gmail.com)
@history
    * 2009-07-01 최초 생성
--------------------------------------------------------*/
static unsigned char is_daylight_saving(long timestamp)
{
  // 1987-05-10 00:00:00 ~ 1988-10-10 22:55:59
  if(timestamp >= 547570800l && timestamp < 560872800l) {
    return 1;
  }
  // 1988-05-08 00:00:00 ~ 1988-10-08 22:59:59
  if(timestamp >= 579020400l && timestamp < 592322400l) {
    return 1;
  }

  return 0;
}

/*--------------------------------------------------------
@function: GetTimestamp
@description
    1970년 1월 1일 0시 0분 0초 부터 흐른 시간을 초로 환산한 값을 구한다.
@arguments:
    year: 년도[1,65535], month: 월[1, 12], day: 일[1, 31]
    hour: 시[0, 23], min: 분[0, 59], sec: 초[0, 59]
    offset: UTC 시간과 차이 (한국은 +9 임)
@return value: 
@written by Jeong-soo, Kim (wittgens@gmail.com)
@history
    - 2009-06-25, 최초 생성
--------------------------------------------------------*/
long GetTimestamp(unsigned int year, char month, char day, char hour, char min, char sec, char offset)
{
    return get_seconds(year, month, day, hour, min, sec) - get_seconds(1970, 1, 1, 0, 0, 0) - offset*3600;
}

/*--------------------------------------------------------
@function: GetDateTime
@description
    unix timestamp를 넘겨받아 년,월,일,시,분,초를 구한다.
@arguments:
    timestamp: 지정 타임스템프
    offset: UTC 시간과 차이 (한국은 +9 임)
    pyear: 년도를 저장할 포인터
    pmonth: 월을 저정할 포인터
    pday: 일을 저장할 포인터
    phour: 시각을 저장할 포인터
    pmin: 분을 저정할 포인터
    psec: 초를 저장할 포인터
@return value: 
@written by Jeong-soo, Kim (wittgens@gmail.com)
@history
    - 2009-07-01, 최초 생성
--------------------------------------------------------*/
long GetDatetime(long timestamp, char offset, unsigned int *pyear, char *pmonth, char *pday, char *phour, char *pmin, char *psec)
{
    int i;
    int year;
    long days;
    long secs;
    char month, day, hour, min, sec;
    int leap_year_count;

    if(is_daylight_saving(timestamp)) {
        timestamp += 3600;
    }


    timestamp += offset*3600L; // UTC 시간 + offset hour

    // 현재 년도를 구한다. (1년을 365일이라고 간주하여)
    year = 1970 + timestamp / SECONDS_PER_1NORMALYEAR;

    // 현재년도의 윤년의 개수를 구한다.
    leap_year_count = year / 4;
    leap_year_count -= year / 100;
    leap_year_count += year / 400;

    // 1970년의 윤년의 개수를 구하여 빼준다.
    leap_year_count -= (1970 / 4) - (1970/100) + (1970/400);

    // 현재년도 1월 1일 부터 현재까지의 일수를 구한다.
    days = (timestamp % SECONDS_PER_1NORMALYEAR) / SECONDS_PER_1DAY + 1; // 1일부터 시작

    days -= leap_year_count;
    if(gl_is_leapyear(year)) days ++;
    if(days <= 0) {
        year--;
        i=12;
    }
    else {
        for(i=1; i<=12; i++) {
            days -= gl_get_last_day(year, i);
            if(days <= 0) break;
        }
    }
    month = i; // 1월 부터 시작
    day = gl_get_last_day(year, i) + days;

    secs = (timestamp % SECONDS_PER_1NORMALYEAR) % SECONDS_PER_1DAY;
    hour = secs / 3600;
    min = (secs % 3600) / 60;
    sec = (secs % 3600) % 60;

    *pyear = year;
    *pmonth = month;
    *pday = day;
    *phour = hour;
    *pmin = min;
    *psec = sec;
}

int main(int argc, char** argv)
{
  if(argc < 3) {
    printf("Usage 1: %s 0 year month day hour minute seconds\n", argv[0]);
    printf("Usage 2: %s 1 timestamp\n", argv[0]);
    exit(-1);
  }
  if(atoi(argv[1]) == 0) {
    if(argc != 8) exit(-2);
    printf("%ld\n", GetTimestamp(atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), atoi(argv[6]), atoi(argv[7]), 9));
  }
  else {
    unsigned int year;
    char month, day, hour, min, sec;
    if(argc != 3) exit(-3);
    GetDatetime(atol(argv[2]), 9, &year, &month, &day, &hour, &min, &sec);
    printf("%04d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, min, sec);
  }
  return 0;
}


크리에이티브 커먼즈 코리아 저작자표시 Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락/3.0에 따라 이용하실 수 있습니다


TAG •

Ruby
2009.06.12 20:57

Rails - config/database.yml

조회 수 19236 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
development:
  adapter: mysql
  database: people_development
  encoding: utf8
  host: localhost
  username: rails
  password: 1234
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: mysql
  database: people_test
  encoding: utf8
  host: localhost
  username: rails
  password: 1234
production:
  adapter: mysql
  database: people
  encoding: utf8
  host: localhost
  username: rails
  password: 1234


Linux
2009.06.12 20:54

페도라에 rails 설치하기

조회 수 22045 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

 

# yum install rubygems ruby ruby-devel mysql mysql-devel mysql-server -y
# gem update --system
# gem install rails -y
# gem install mysql

C.E.
2009.06.10 21:51

Architecture

조회 수 207216 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

i386

인텔 80386(또는 i386)은 인텔사에서 1985년에 개발한 개인용 컴퓨터 마이크로프로세서이다. x86 CPU 시리즈 중에 가장 처음으로 32비트 아키텍처로 만들어진 이 CPU는, 이전 제품인 80286에서 32비트로 확장된 명령어 셋과 강화된 레지스터, 대용량 메모리를 쓰는 프로그램의 지원을 위한 페이징 변환 유닛(paging translation unit) 등이 추가되었다.
80386 전용의 수치 연산 전용 코프로세서로 80387이 있다.

i586

펜티엄(Pentium)은 인텔에서 만든 개인용 컴퓨터용 마이크로프로세서의 상표명이다. 인텔에서 만든 제 5 세대 마이크로프로세서라는 의미를 가진 펜티엄은 현재까지도 인텔에서 제작된 개인용 컴퓨터용 마이크로프로세서의 이름으로 계속 사용되고 있다. 1993년 3월 22일에 첫 출시된 펜티엄 프로세서는 처음에는 x86 라인을 따라 80586 또는 i586이라고 불릴 예정이었다. 그러나 AMD 사와의 상표권 분쟁 과정에서 숫자(80386, 80486 등)를 상표로 사용할 수 없다는 판결을 받고 펜티엄이라는 이름으로 출시되었다. 그러나 i586이라는 이름은 초기 펜티엄 칩들이나 펜티엄과 유사한 기능의 다른 회사 칩들을 가리키기 위해 아직도 종종 사용된다.

i686

Intel P6 (microarchitecture), as first used in the Pentium Pro and later adapted into the Pentium M and Core architectures
In open source and especially Linux computing, it refers to compiler optimization for Pentium Pro and all later Intel processors, and the Athlon and all later AMD processors, as compared to "i386" builds that are slower but more compatible with older processors

x86 

x86 또는 80x86은 인텔이 개발한 마이크로프로세서 계열을 부르는 말이자, 이들과 호환되는 프로세서들에서 사용한 명령 집합 아키텍처들을 통칭하는 말이다.

x86_64 

x86 명령어 집합 아키텍처의 64비트 모임이다. x86-64 명령어 집합은 에뮬레이션 없이 인텔의 x86를 지원하며 AMD64로 이름 붙인 AMD에 의해 고안되었다. 이 아키텍처는 인텔 64라는 이름으로 인텔에 의해 복제되기도 했다. (옘힐, 클래카마스 기술, CT, IA-32e, EM64T 등으로 불렸음)[1] 이로써 x86-64 또는 x64의 이름을 일상적으로 사용하기에 이르렀다.
x86-64는 인텔의 아이테니엄 계열의 프로세서 아키텍처인 IA-64와 헷갈리면 안 된다. 이는 32비트 x86 프로세서의 명령어 집합 수준과 호환되지 않고, 호환성을 위해서라면 속도 저하와 더불어 에뮬레이션을 사용해야 한다.

 

 참조: http://ko.wikipedia.org

TAG •

Board Pagination Prev 1 ... 11 12 13 14 15 16 17 18 19 20 ... 39 Next
/ 39