php 는 flush() 를 하기전까지는 아무것도 출력하지 않습니다.
그래서 최종 결과물의 헤더에는 Content-Length 가 있죠.

flush() 를 하는 순간 chunked 헤더를 날리고,
현재까지 버퍼의 내용을 출력합니다.
Content-Length 대신 chunk 데이터 앞에 chunk 크기가 주어집니다.

그러면 브라우저가 그것을 받아서 화면에 뿌려주죠.
페이지가 완성되지 않아도 화면을 구성할 수 있게되는 것입니다.

문제는 익스플로러가 이런 chunk 되지 않은
plain text 로 넘어오는 정보마저 받다말고 렌더링을 하려 하는것 같다는 것입니다.

해외에서의 접속을 좀 빨리 해볼 생각으로 페이지 압축전송을 했다가 우연히 발견하게 되었습니다.

다중중첩테이블 등에 의해 렌더링에 자원소모가 상당히 심한 페이지었는데,
압축전송을 한것 만으로 익스플로러에서는 눈에 띄게 렌더링이 빨라졌습니다.
(불여우에서는 원래 빨랐습니다. 그래도 약간의 향상은 있더군요.)

해외에서의 접속에도 생각 이상의 효과를 봤습니다.
전송속도를 체크해 보려고 수십메가의 파일을 다운로드해 봐도,
국내에서 다운받는것과 비슷한 속도가 났는데,
유독 php 페이지만 느리게 출력됐었습니다.
단지 압축전송을 한것만으로 그렇게 빨라지는것이 이해되지는 않지만,
결과가 좋아 만족합니다.
(서버는 한국, 대상은 일본이고,
한일간의 주요 네트워크 장비중 한->일 방향에서,
텍스트 필터링을 하는 뭔가가 있지 않나 생각해봅니다.)


결론은 압축전송 입니다.
php 에서 간단히 구현할 수 있는것이
ob_gzhandler 입니다.
zlib 를 설치하면 사용할 수 있습니다.

ob_start('ob_gzhandler');
하면,
출력되는 모든 정보가 압축이 되고,
브라우저가 이를 풀어서 보여줍니다.

이렇게 하면 압축이 되었으므로,
모두 받아서 풀기전까지는 브라우저가 내용을 보여줄 수 없습니다.

이것의 단점은 flush() 의 불가 라는 점입니다.
ob_flush() 는 무시되고,
flush() 를 하면 chunked 헤더를 날리지만,
결국에는 하나로 압축되어 한덩어리의 chunk 데이터만 보내집니다.

해외에서의 접속에서 flush() 가 필요하다면,
압축전송을 포기하거나,
직접 작성할 수 밖에 없습니다.

ob_handler 와 ob_flush 를 직접 작성하면,
flush() 와 연동해서 충분히 제작 가능합니다.

템플릿을 사용한다면 flush() 를 위해
ob_start 를 안하고 있다가,
템플릿 출력시에 동작하게 하면 간단히 적용하기에 좋을것입니다.


출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=53266&sca=%BA%EA%B6%F3%BF%EC%C0%FA
Posted by 철냄비짱
,
사용자 삽입 이미지


CWD 특성상 순간순간 접속자 수의 폭증으로 인해 Oracle -> Cubrid DB 교체작업 일정이 모두 잡혔다.

마이그레이션 작업,

PHP 소스변경,

Apache 통합 버전업,

임의 테스트

이 까지.. 8월 말까지 작업이 가능하련지 모르겠다.

이제 껏 Mysql 에만 빠져 살다가 CWD에 와서 Oracle로 허우적 댄지 이제 한달밖에 안되었는데

DB 교체라니!!!

생소한 이름의 Cubrid...

나 같은 찌끄래기가 명함 내밀 짬밥이 아닌데...ㅜㅜ

부러버요~

Posted by 철냄비짱
,

Commit. Rollback

DataBase/Oracle 2008. 7. 31. 14:32

테이블에 insert, update, delete 문으로 지시하고, COMMIT을 실행하면 모든 변경 사항이 영구히 데이터베이스에 저장되며, ROLLBACK은 마지막 commit이나 Rollback 이후의 변경 사항을 취소하고 데이터베이스를 원래의 상태로 되돌려 준다. 이를 트랜잭션(transaction)이라 하며, 트랜잭션에서 데이터베이스를 변경하라는 명령이 commit이고, commit 전까지 변경된 것을 되돌리는 것이 rollback이다.

SAVEPOINT는 트랜잭션 내에 세이브포인트를 만들 수 있게 해준다. 하나의 트랜잭션 내에 여러 개의 세이브포인트를 만들 수 있으며, ROLLBACK TO <세이브포인트> 문을 이용하여 큰 규모의 트랜잭션 내에서 명령들의 특정한 그룹만 롤백 할 수 있다.

SET TRANSACTION 명령으로 고립도 레벨이나 트랜잭션의 읽기 전용 혹은 읽기 쓰기 모드, 그리고 특정한 롤백 세그먼트를 이용하도록 하는 등의 다양한 트랜잭션 속성을 지정하는데 이용된다.

    SET TRANSACTION READ ONLY
    SET TRANSACTION READ WRITE
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    SET TRANSACTION ISOLATION READ COMMITTED

 또한 SET CONSTRAINTS 문은 트랜잭션 내의 연기 가능 제약조건의 강제 모드를 지정한다. 

【형식】ROLLBACK 문
ROLLBACK [WORK] [{TO [SAVEPOINT] savepoint}|{FORCE 'text'} ];

【형식】COMMIT 문
COMMIT [WORK] [{COMMENT 'text'} | {FORCE 'text' [,integer]} ];
기존 8i까지는 작업을 취소한다는 의미로 rollback이라는 용어를 사용했지만, 9i부터는 undo라는 용어를 사용한다. 기존에 사용하던 용어인 롤백 데이터, 롤백 세그먼트 등을 모두 언두 데이터, 언두 세그먼트라고 지칭한다.
단, 작업을 취소할 때 사용하는 rollback 명령어는 유효하다.


::::::::::::::::::::::::::::::::::::::
어디선가 퍼온 자료. commit 과 rollback의 정의를 이해하기에 좋다.

CWD에서 파견 근무를 하며 서버에서 Auto Commit 설정이 되어 있는 지 모르고, Toad 에서 Commit을

시키지 않은 채 작업종료, 또는 다른 추가  작업을 하다 Table Lock이 걸려 왜그런지 한참을 고민했다...

무식하긴....

CWD 특성상 세션타임이 짧아 DB 작업을 여유있게 하지 못하는 것이 힘들지만, 뭐 나름 재밌다. ^^ 스릴있고..

이번만큼은 사내 별명인 DB Cracker의 능력을 보여선 안되겠다...ㅠㅠ
Posted by 철냄비짱
,
사용자 삽입 이미지
사용자 삽입 이미지

처음 사용하는 DELL 제품이라 걱정 반 이었다만...

파견근무로 인한 뚜벅이가 된 이후에 들고 다니기엔 엄청난 무게...빼곤 최고사양...

노트북 그래픽이 8600GT 라니,... 말 다했음...

데빌메이크라이4, PS2 에뮬이 원활하게 플레이, 역시나 개발작업을 할 때의 툴들은 날아다닙니다....;;;

한동안 엑박에 빠져서 관리를 제대로 못했는데.. 파견 끝나면 한번 밀고 제대로 관리해 볼듯...

블로깅을 한동안 안하다보니...5월달에 지른걸 이제서야 올리네...

여자친구가 추가해준 램 4기가 자세한 질문은 댓글로 고고씽
Posted by 철냄비짱
,
사용자 삽입 이미지

또다시 파워빌더 욕심이 번졌다...

봄인가.. 이상한 바람이나 불고 ㅠ.ㅜ

파워빌더를 처음 접한것이 벌써...5년...아니 6년인가...정말 빠르다...

허나 내 실력은 그대로니 참...ㅠ

먹고산다는 핑계로 책만 사고 공부는 제대로 안하고, 내가 봐도 한심하구나...

회사에선 JSP로 갈아탄다는 발표와 함께 내 차근차근 파워빌더 공부하겠다는 목표도 사라졌다...

JSP에 한동안 무쟈게 바쁠것이기에...ㅠ

왜? 짤리면 안되니까..ㅠ.ㅜ 파워빌더 공부하고 싶어~~~~~
Posted by 철냄비짱
,

ASHTON AT-3800

Person/History 2008. 3. 8. 18:02
사용자 삽입 이미지

으흠...어디서 부터 시작을 해야할까...

대구서 근무중일때 짝이 잘맞던 정대리님과 시간도 때울겸...구경중인 전자관에서 둘다 혹!! 한

2.1채널 애쉬튼 스피커

정말 착한 가격...당시 3~4만원 사이였던것 같다. 현재도 3만2천원 정도에서 거래중인 싼 가격의 좋은 스피커

현재도 잘 사용중이며 빵빵한 사운드는 역시... 막귀인 내 귀에도 정말 잘 들린다.

내가 지른 주말, 정대리님도 질렀다시네..

역시 ㅎㅎ ^^

선이 마구 많은 5.1이나 6.1 보다는 역시나 깔끔하고 복잡하지 않는 2.1 채널의 스피커 선호

사실 5.1은 저가형만 사용해봐서 왈가왈부할 그런 입장은 아니지만 ^^

아직까지는 만족중...

허나 오랜시간 사용을 안했던 탓일까... 스피커 잭의 위치가 약간의 틈새가 있다면 소음과 한쪽이 안나오는

아주 하찮은 문제가 생겼다...역시 잭만 바꾸면 되지만 이놈의 귀차니즘이란...
Posted by 철냄비짱
,
사용자 삽입 이미지


제품명

DV5233TX
프로세서

Intel Core Duo T2300 Yonah-1.66GHz
/ Intel 945PM, FSB 667MHz



메인
메모리

512MB DDR2 SDRAM 667MHz / 최대 : 2GB

캐쉬
메모리

L2 cache : 2MB





LCD

15.4" 컬러 TFT WXGA (1280 x 768)
/ BrightView LCD

그래픽

nVidia Geforce Go 7400  Turbo 256M

비디오
메모리

128MB

HDD

60GB S-ATA (5400rpm)

Bay
FDD

3.5" 1.44MB (옵션)

CD-ROM

DVD-CDRW COMBO DRIVE


유선통신

56Kbps Modem, 10/100Mbps Ethernet

무선통신
무선랜 내장
(Intel PRO/Wireless 2200 802.11 a/b/g)
PCMCIA 슬롯
ExpressCard/54 Slot, 16bit PCMCIA and 32bit Cardbus Slot (Type Ⅰ/ll PC 카드)
키보드

Full-sized Mobile Windows Keyboard

포인팅

터치패드 (스크롤존 기능)

I/O 포트

USB 2.0 x 3, VGA, S-Video, IEEE1394,
Modem, Ethernet, Mic-In, Audio-Out,
Expansion Port2 for xb2000

사운드
integrated AC'97 Audio Codec,
Altec Lansing Speaker

배터리

6셀 리튬이온 배터리

AC
어탭터

리튬이온 배터리 (6Cell)

무게

약 2.95Kg

크기(WXDXH)
약 357.9 x 263.9 mm x 35mm
S/W
운영체제

Microsoft Windows XP Home

기본설치
S/W
OS CD, document CD 외 : Adobe Acrobat
Reader, InterVideo WinDVD Player,
Creator(일부기종), iTunes Digital jukebox,
Sonic RecordNow, Symantec Norton AntiVirus
2004(체험판), Sun Java

가장 오랜 시간 나와 함께한 동료 ^^

내 지랄같은 성격과 행동을 다 받아주는 ㅋㅋ 2년전 180만원에 구매해서 현재까지 거의 탈없이 사용중.

A/S의 불편함만 감수 할 수 있다면 무조건 HP 제품을 선호한다.

가격대 성능비가 내 기준에선 가장 우세하달까...

독립형 그래픽카드의 256 메모리, 현재 위의 성능에 130에 판매되고 있다.

난 메모리1기가 업그레이드에 80G로 해서 180이었으니...

아직 꽤나 돈값하고 있는 모양...

앞으로 1~2년간은 더 같이 살듯하다... 빵빵한 알텍렌싱 스피커의 음향과 더불어 개인 멀티미디어 노트북으론

정말 추천...

프로그래밍 일을 하는 나에게 있어서도 가장 좋은 노트북이다.

앞으로 노트북을 또다시 구매한다면 이번엔 LG 쪽으로 가볼까한다...
Posted by 철냄비짱
,

<script src="click_cal.js"></script>

<input type="text" OnClick="Calendar(this,'down','no');">



달력이 출현하여 단순한 클릭으로 0000-00-00 형식의 일자가 입력된다.

물론 JS 파일 편집으로 다양한 구분자로 수정 가능.
Posted by 철냄비짱
,

// 한글을 적당히 잘라주는 함수
function CutString($str_total, $str_cut_len)
{  // cust_string(전체문자열, 보여줄 문자수:byte)

 $str_total_len = strlen($str_total);   // 전체 문자수 : byte
 $str_view_len = $str_cut_len;     // 보여줄 문자수 : byte

 for($k=0; $k < $str_view_len - 1; $k++ )
 {
  if ( ord(substr($str_total, $k, 1)) > 127 ) // substr() : byte
  { 
   $k++;    // 한글은 2바이트이기에
  }
 }//for($k=0; $k < $str_view_len - 1; $k++ )

 if($str_total_len > $str_view_len)
 {
  $str_view = substr($str_total, 0, $k) . '..';
 }
 else
 {
  $str_view = $str_total;
 }//if($str_total_len > $str_view_len)

 return $str_view;
}//function CutString($str_total, $str_cut_len)


사용법은 간단....
$subject = CutString($row[title], 30);

수 많은 문자열 커팅함수 중에 하나...
특별히 잘난 것도, 못난 것도 없는 무난한 함수

Posted by 철냄비짱
,
function bugsOpen(url, target, w, h, s, r) {
    if(s) s = 'auto';
    else s = 'no';
    if(r) r= 'yes';
    else r = 'no'
    var newwin = window.open("about:blank",target,'width='+w+',height='+h+',top=0,left=0,status=no,scrollbars='+s+',resizable='+r);
    if (newwin == null){
        alert("팝업 차단기능 혹은 팝업차단 프로그램이 동작중입니다. 팝업 차단 기능을 해제한 후 다시 시도하세요.");
    }else{
        window.open(url,target,'width='+w+',height='+h+',top=0,left=0,scrollbars='+s+',resizable='+r);
        newwin = window.open(url,target,'width='+w+',height='+h+',top=0,left=0,scrollbars='+s+',resizable='+r);
        return newwin;
        newwin.focus();
    }
}

따로 문구가 생각이 안나 넣어봤다 ^^;;;

창을 한번 띄워보고 안띄워지면 팝업 해제해달라고 alert 창을 띄운다.

특히 결제부분이나 회원가입부분에서 주로 쓰인다...

사용자들은 필요한 정보를 작성하고 초기화되면 상당히 짜증이 나거나, 두번씩 쓰이게 하지 않기 위해서

사용중.
Posted by 철냄비짱
,