2007/08/31

여우비 - 임창정

멀어진 니 마음 이젠 상관없어 딴 남자들처럼 멋지게 잊어 볼테니깐. 많은 친구들이 내게 당부한 그녀의 가치 내겐 아무것도 느낄 수 없었던 너만의 멋. 왜 맨날 넌 시간이 없어 날 볼 때 또 딴 짓이니  널 원했던 건 맞아 나지만 그 댓가가 너무 커. 내 모양이 싫은 건지 가진게 없어 지쳤니 아냐 나도 싫어 너 같은 애 사실 이런 말하고 싶었어. 니가 뭐 대단한 미인인 것 같니 딴 여자들보다 못한 것도 많아 마음이지

맑은 봄날 여우비 같은 그녀 이해가 안가 내겐 잘해 준 적도 한번 없는 너였잖아. 왜 맨날 넌 시간이 없어 날 볼 때 또 딴 짓이니 널 원했던 건 맞아 나지만 그 댓가가 너무 커. 내 모양이 싫은 건지 가진게 없어 지쳤니 아냐 나도 싫어 너 같은 애 사실 이런 말하고 싶은데

(니가 반한 멋진 차 니가 반한 멋진 옷 니가 반한 그 무엇도 나는 없지만 지금은 그저 멋진놈 지금은 그저 미래만으로 모두 다 이겨 나갈 수 있어)

왜 맨날 넌 시간이 없어 날 볼 때 또 딴 짓이니 널 원했던 건 맞아 나지만 그 댓가가 너무 커. 내 모양이 싫은 건지 가진게 없어 지쳤니 아냐 나도 싫어 너 같은 애 사실 이런 말 하고 싶은데

슬레이어즈 Try Opening

아아~~
저 높은 하늘을 새가 되어 날아가고 싶어
아득히 먼 곳에 보이는 희망 찾아서
희망에 찬 마음으로 현실을 바라볼 수 있다면
더 이상 약해지지 않아
미래도 두렵진 않아
 
바람을 타고서 꿈에 저편 너머로
날아가고 싶어
용기의 날개를 달고서 날고싶어
 
새가되어 세상 바라보는 마음을
계속 간직할꺼야
어려운 현실을 난 이겨나갈꺼야!

You're Under Arrest 2기 Opening Theme

항상 혼잣말을 했었지
삶이 힘들때면
그래도 가슴뛰는 이 느낌
잃고 싶지 않아
꿈은 멀어져 가고
현실은 날 붙들고 있지만
바람이 불어올때도
웃는 얼굴 잃지 않고 힘껏 날 껴안고서
멋지게 살아갈꺼야
이제 Love Some body~
언젠지 몰라도
찾아낼꺼야
take my chance
온 세상 모든 시간이 멈춰도
저 하늘을 날고 싶어
이젠 Love Some body~
만나게 될꺼야
세상 하나뿐인 사람을
끝이 없는 젊음을 안고서
미랠 향해 달려봐
 

You're Under Arrest Ending Theme

항상 내 갈길을 고집했어
나만의 생각 그것 때문에
하지만 남은건 뜻 모를 외로움
 
늘 가까운 곳에 서있는 널
바라볼 수 밖에 없었기에
어쩔 수 없는 건 널 향한 그리움
 
가슴속 깊이 간직했던
아픔이 밀려와
말할수가 없었지 후~ 난 또 그자리
 
바람아 (불어오렴)
시간을 흐르게 하렴 (내마음 전해주렴)
영원한 시간속에 언젠가 아아~
말할 수 있을 것 같아
 
Thanks You Freinds...
 

2007/08/26

연예인들의 학력위조 혐의..

내 일하기도 바쁜데 잠시 엉뚱한데 시간을 좀 쏟아본다.

최근에 연예인들에 대한 학력 위조가 문화, 방송계에 커다란 바람을 불고 왔다. 많은 연예인들이 그런 분류에 속한다.

신정아, 김옥랑, 장미희, 심형래, 이창하, 최수종, 안재모, 오승현, 윤석화, 강석, 주영훈, 이지영 등 대중에게 많이 알려진 인물이 꽤 많다.

한가지 재미있는 것은 이번에 사람들이 떠들고 다니는 "인터넷에 너무 무관심했다", "그럴 의도는 없었다" 이런 이야기들 중 인터넷에 너무 무관심했에만 잠시 이야기 해볼까 한다.

연예인들이 그럴 의도가 있었든 없었든 그건 그네들만의 사정이고, 인터넷에 너무 무관심했다는 사실 거의 맞다. 심지어 내가 좋아하는 이모양 가수도 컴퓨터과 인터넷을 그렇게 잘알지 못한다(이건 실제로 만나서 본인에게 들었던..)

물론 가수나 연기자들은 그들만의 분야가 있으니 쓸때없이 인터넷에 소비하는 시간이 많은 사람들이나 전문가가 아닌 이상에서야 인터넷은 쉽게 다가설 수 없는 성역이다.

그런면에서 성역의 지킴이들이라 할 수 있는 인터넷 매니아나 포털 등은 정확한 정보의 양산과 배포를 해야만 한다.

이번 사건들에서 공통적으로 볼 수 있는 부분이 고의 여부를 떠나 포털 등이 대충 주서들은 말로 연예인들에 대한 학력을 게재해 놓는 것이다.

물론 연예인들이 잘했다는 건 절대 아니다. 하지만 성역 지킴이인 포털등은 사실 확인에 나서지 않아 수 많은 연예인들이 먼저 아니다 라고 말하게 하는게 좋은 것인가?

틀림없이 틀린 사실이다. 포털도 연예인들 학력에 대한 확실한 확인 후 올려야 하는 것이다. 일례로 최수종의 경우 소속사에도 잘못된 사실이 적혀 있었으니 포털만의 잘못이라고 할 수 없으나 오승현의 경우엔 그렇지 않았다.

일례로 A 포털은 오승현에 대해 단국대 입학까지만 적혀 있고, B 포털은 단국대 학사라고 되어 있던걸 확인해볼 수 있었다.

이런 상황에도 불구하고 여전히 연예인들에 대한 비난과 욕만 쏟아지고 실제 제대로된 학력을 넣지 않은 포털들은 아무런 욕도 먹고 있지 않다.

이런 문제들이 꼭 포털의 문제라고 보기도 어렵다. 인터넷은 참여로 이루어지는 바다이기 때문이다. 참여하지 않는다면 잘못된 사실은 고쳐질 수 없다.

그러나 포털도 반성해야 하지 않나 싶다. 정보를 제공한다는 이유 하나만으로 욕 먹지 아니하는 것은 웃기지 아니한가.

갈수록 온라인 상에서의 폭력이 정도를 넘어서고 있다. 제대로 된 의식 전환이 필요하다

2007/08/23

CodeIgniter 에서 객체를 수동으로 생성해서 사용하기

CodeIgniter 에서는 라이브러리나 컨트롤을 읽어들일때 자동으로 클래스를 할당하게 되므로 실제로 배열에 객체 데이터를 담을 수 없다.
 
이때 다음과 같은 파일을 만들고 쓰면 잘 된다.
 
application/system/libraries 디렉토리 밑에 beans.php 파일을 아래와 같이 만든다.
 
<pre>
&lt;?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class beans
{
    /**
     * 빈즈 이름
     *
     * @var string
     */
    var $beans_name;
   
    /**
     * 빈즈 파일을 읽어들일 기본 경로
     *
     * @var string
     */
    var $load_dir;
   
    function beans ( $dir )
    {
        // 기본적으로 Beans 를 불러들일 경로
        $this->load_dir = APPPATH . 'libraries/' . $dir . '/';
    }
   
    function load ( $beans_name )
    {
        // 불러들일 Beans 파일 포함
        include_once ( $this->load_dir . $beans_name . EXT );
    }
}
?>
</pre>
 
이 때 Beans 를 불러오는 기본 경로는 다르게 설정해주는 것이 좋다. 본인은 libraries 밑에 beans 파일을 두기로 했다.
 
그리고 다음과 같이 컨트롤러나 라이브러리에서 사용해주면 된다.
 
$this->load->library ( 'beans', 'warning' );
$this->beans->load ( 'test' );
$tester = new test ();
 
여기서는 본인이 test 라고 만든 빈즈 파일을 시험삼아 해보았으니 필요에 따라 만들면 되겠다..

2007/08/22

추억이란 상당히 재미있는 존재인듯..

정말이지. 집에 있었던 시디들이 내 기록을 얼마동안은 보존해주고 있구나.. 란 생각이 든다.
난 어렸을때 정말 어떤 사람이었던거지..
 
시디에 있는 음악들과 수 많은 파일들(그중엔 야동이라 불리는 녀석들도.. 쬐금은..). 아아하하하;;
멋적은 웃음과 함께 내 시간을 잠깐 거슬러 가봤다. 재미있는걸?

삶에서 남는것은...?

집에 있는 시디를 하나씩 뒤져보다가(물론 집에 일거리 가져와서 일하려고 했는데) 사진들을 발견했다. 그 당시 130만 화소 카메라로 이곳저곳을 찍으러 돌아다니고 나도 봤는데, 그때 내가 그런 모습을 가지고 있는지 전혀 상상도 못했다. 별짓 거리 다 했구나 ㅡㅡ; 이런 생각이 들더라
 
그래도 사진을 보니 반가웠다. 몇년동안이나 짝사랑했던 여자의 사진부터 직장 사람들까지.. 후후 이런게 추억이란건가 보다. 하긴 사람머리로 기억할 수 있는건 한계가 있겠지
그렇다 하더라도 너무 반가웠어^^

2007/08/21

국정실패라..

뉴시스 2007년 08월 21일(화) 오후 07:09 자에 다음과 같은 기사가 올라왔다.
 
한나라당 나경원 대변인은 21일 범여권을 겨냥 "대선 120일 전인 오늘까지도 우왕좌왕하는 국정실패 세력에게 '비겁하게 헛소문으로 공격하지 말고 너나 잘 하라'고 말해 주고 싶다"고 일갈했다.
그는 또 "한자릿수도 안 되는 지지율을 가진 정 전 의장이 지지율 59%의 이 후보에게 악담을 퍼붓는 것은 하룻강아지 범 무서운 줄 모르는 격"이라며 "정 전 의장이나 범여권 후보들 심정이야 국민의 절대 지지를 받는 이 후보에게 저주의 굿판이라도 벌이고 싶겠지만 그렇다고 범여권을 떠난 민심이 돌아오진 않는다"고 말했다.

그는 이어 "정 전 의장이야말로 열린우리당 창당공신이고 당 의장을 2번씩이나 지낸 국정실패의 주역으로 노무현 정권과 운명을 같이 해야 할 정치인인데도 노 대통령을 비난하고 탈당한 기회주의자"라며 "이번 대선에 출전할 명분과 자격이 없는 정치인이라는 지적이 여권 내부에서 있었다"고 비판 수위를 높였다.
 
좀 일갈해볼까나?
 
한나라당 나경원 대변인은 21일 범여권을 겨냥 "대선 120일 전인 오늘까지도 우왕좌왕하는 국정실패 세력에게 '비겁하게 헛소문으로 공격하지 말고 너나 잘 하라'고 말해 주고 싶다"고 일갈했다.
-> 여권이 비겁한건 사실이다.
 
그는 또 "한자릿수도 안 되는 지지율을 가진 정 전 의장이 지지율 59%의 이 후보에게 악담을 퍼붓는 것은 하룻강아지 범 무서운 줄 모르는 격"이라며 "정 전 의장이나 범여권 후보들 심정이야 국민의 절대 지지를 받는 이 후보에게 저주의 굿판이라도 벌이고 싶겠지만 그렇다고 범여권을 떠난 민심이 돌아오진 않는다"고 말했다.
-> 범여권 민심 떠난지 오래됐지.. 근데 하룻강아지 범 무서운 모르는 격이라. 한나라께서 그리 말씀하셔도 되나? 그럼 국가를 대표하는 대통령은 한나라께는 하룻강아지고 한나라께선 범이라는 얘기시네 그려..
 
그는 이어 "정 전 의장이야말로 열린우리당 창당공신이고 당 의장을 2번씩이나 지낸 국정실패의 주역으로 노무현 정권과 운명을 같이 해야 할 정치인인데도 노 대통령을 비난하고 탈당한 기회주의자"라며 "이번 대선에 출전할 명분과 자격이 없는 정치인이라는 지적이 여권 내부에서 있었다"고 비판 수위를 높였다.
-> 머 백번 심사 숙고해서 노무현 정권과 운명을 같이 해야 할 정치인 맞겠지. 근데 국정실패는 한나라께도 있는거 아닌가? 내가 국회에 얼마나 많은 법안이 통과되고 있는지 모르겠지만 맨날 신문엔 국회에 계류중인 민생법안 뉴스가 올라오는건 누구 탓일까나. 한나라께서도 끝까지 발목잡은 것이 있지 않은가? 도대체 서민을 위한다는게 무슨 얘기인지 모르겠다.
 
도대체 한나라 국회의원들께선 서민들께 무엇을 해주셨는고? 경제 좋지. 경제 좋아져서 나도 돈 많이 벌고 30 되기 전에 전세집 얻고 풍요롭게 결혼할 수 있을 정도가 된다면 더할 나위 없겠지. 헌데 7% 나 그거 이해가 안되. 지금 당장 올린다고 하고 후에 태클거는 사람들처럼 국가 차원에서 드는 비용은 어찌할건데? 그건 땅파서 돈을 뽑아낸다는 건가?
아 추가로 대운하도 이해가 안되. 실효성, 일자리 확대 다 좋아, 근데 말야 대운하가 지나가는데 논 하나 없애면 쌀값 올라가거든. 그리고 대대로 조상을 모셔온 사람들에게 그것도 서민들에게 무덤 옮기라고 하는게 말이 되? 그리고 대운하 파는데 지나가는길에 문화재는 어떻게 할껀데? 이후보께는 역사인식도 없나 보지? 비석 밟고 올라간건 실수로 그렇다 쳐도 문화재는 어떻게 할껀데? 아님 고속도로처럼 대운하를 문화재 피해서 돌돌 돌려서 공사할껀가? 그럼 대운하 안파는 것보다 낫지.
 
상식적으로 생각해보자. 대운하는 파나마 운하가 유명한데, 파나마 운하를 판 이유 자체가 물류 운송에 시간이 걸리기 때문이다. 한반도에서 함경도와 부산을 연결하지 않는한 굳이 대운하를 팔 이유가 있을까?
 
서울->부산간 철도 연결되어있고, 원하면 비행기로 물류수송도 가능해.
 
아 하나더 대운하 팠다 치고, 정말 재수가 없어서 대운하 한쪽이 무너지면 그 주변에 있는 민가와 밭, 사람들은 어찌할껀데? 그건 국가적인 재앙일껀데? 이건 청계천이 아니라오
뭐 사람들이 돈 하나에 미쳐서 이후보를 뽑은걸 보면 참 대단하단 생각밖에 안들어.
 
도대체 대운하 팠을때, 당장 세재 개편했을때 이익이 아니라 장기적인 이익으로 역사적으로, 국가적으로 어떤 영향을 가져올지 생각은 하는건지?
 
뭐 한나라 하시는 생각이 늘 그렇지. 아 우리나라 선거법 고쳐야 되. 이거 문제 많어 특히 온라인 홍보방법. 정말 문제 많어..
 
한나라가 아무리 달라졌다곤 해도 그대로야. 썩어빠진 정신, 소금에 절이고 새우젓에 묻힌 머리들... 후..
 
아 이런 말이 있더라.
 
"소금에 절인것은 썩지 않는다"
 
내가 잘못들었나?

2007/08/15

Windows Vista 에서 OpenVPN 으로 VPN 접속시 라우팅 문제

Windows Vista 에서 VPN 을 사용해서 회사로 접속시에 직접 명령을 치지 않고 OpenVPN 이란 프로그램을 사용해서 접속을 하는 것이 편합니다. 그런데 Windows Vista 에선 약간의 문제가 발생해서 제대로 VPN 에 연결되지 않는 문제가 발생합니다.

해결방법은 VPN 키가 있는 곳에 확장자가 ovpn 인 파일을 열어 맨 끝에 다음 2 줄을 추가해줍니다.

route-method exe
route-delay 2

그리고 접속하면 깨끗이 접속되는 걸 확인할 수 있습니다.

OpenVPN 을 사용하지 않아도 Windows Vista 사용자들은 꼭 확인해주시기 바랍니다.

세상에서 필요로 하는 것..

종이라고 하는 것은 치면 소리가 난다.
쳐도 소리가 나지 않는 것은 세상에서 버린 종이다.
또 거울이란 비추면 그림자가 나타난다. 비추어도 그림자가
나타나지 않는 것은 세상에서 내다버린 거울이다.
보통 사람이란 사랑하면 따라온다.
사랑해도 따라오지 않는 사람은 또한 세상에서 버린 사람이다.
-한용운-

지금하십시오

할일이 생각나거든 지금 하십시오.
오늘 하늘은 맑지만
내일은 구름이 보일런지 모릅니다.
어제는 이미 당신의 것이 아니니
지금 하십시오.

친절한 말 한마디 생각나거든
지금 말하십시오.
내일은 당신의 것이 안될지도 모릅니다.
사랑하는 사람은 언제나 곁에 있지는 않습니다.
사랑의 말이 있다면 지금 하십시오.

미소를 짓고 싶거든 지금 웃어주십시오.
당신의 친구가 떠나기 전에
장미는 피고 가슴이 설레일 때
지금 당신의 미소를 주십시오.

불려야 할 노래가 있다면 지금 부르십시오.
당신의 해가 저물면 노래부르기엔
너무나 늦습니다.
당신의 노래를 지금 부르십시오.
--
놀부에서 제작해서 배부하는 글입니다.

2007/08/14

CodeIgniter 에서 PEAR 라이브러리 사용하기

CodeIgniter 는 단 시간내에 빠른 개발 방법을 지원하는 경량급 PHP 프레임워크인데, 모든 것을 이 안에서 다 제공하다 보니 하나의 문제가 생겼다. 바로 외부에 존재하는 수 많은 라이브러리의 사용이 그것이다.

이 글은 PHP 에서 지원하는 PEAR 라이브러리를 CodeIgniter 에서 사용하는 방법을 다룬다.

CodeIgniter 에서 Pear 를 사용하기 위해선 6 가지의 절차를 거쳐야 한다.

우선 config/config.php 파일을 열어서 아래처럼 바꿔준다.

$config['enable_hooks'] = FALSE; ☞ $config['enable_hooks'] = TRUE

그리고 같은 디렉토리 아래 hooks.php 파일을 열어 파일의 맨 끝(PHP 선언이 끝나기 전에 있는 라인)에 다음 내용을 추가해준다.


$hook['pre_controller'][] = array (
'class' => 'Pear_hook',
'function' => 'index',
'filename' => 'pear_hook.php',
'filepath' => 'hooks'
);


이제 hook 을 작성할 차례이다. application 아래에 hooks 디렉토리로 이동해 다음 이름으로 파일을 작성한다.

파일 이름 : pear_hook.php

<?php if ( !defined ( 'BASEPATH' )) exit ( 'No direct script access allowed' );
class Pear_hook
{
function index ()
{
// on Apache
// ini_set ( 'include_path', ini_get ( 'include_path' ) . ':' . BASEPATH . 'application/web/pear/' );
ini_set ( 'include_path', ini_get ( 'include_path' ) . ':' . BASEPATH . 'application/web/pear/' );
}
}
?>


여기까지 따라왔으니 이제 3단계만 더 거치면 PEAR 를 원활하게 사용할 수 있다. application/libraries 디렉토리로 이동해 아래 파일을 작성한다.

파일 이름 : Pearloader.php

<?php if ( !defined ( 'BASEPATH' )) exit ( 'No direct script access allowed' );
class PearLoader
{
function load ( $package, $class, $options = null )
{
require_once ( $package . '/' . $class . '.php' );
if ( strpos ( $package, '/' ) ) $package = str_replace ( '/', '_', $package );
$classname = $package . "_" . $class;
if ( is_null ( $options ) )
{
return new $classname ();
}
else
{
return new $classname ( $options );
}
}
}
?>


여기까지가 CodeIgniter 에서 Pear 라이브러리를 사용하기 위해 준비를 한 것이다. 이제 최종 단계가 2단계 남아있는데, 따라하자.

하나는 실제 사용할 PEAR 라이브러리와 PEAR.php 파일의 복사가 필요하다.

PEAR.php 파일은 PEAR 가 설치된 경로에 가면 있으니 application 디렉토리 아래 pear 라는 디렉토리를 만들어 복사하고, 실제 사용할 PEAR 라이브러리는 pear.php 에서 받아서 pear 디렉토리 아래에 넣어두면 된다.

이때 사용할 PEAR 라이브러리의 디렉토리명과 클래스명을 잘 파악해둬야 한다(물론 사용하기 위해 불러들이는 파일 하나만에 대해서다).

내 경우 Spreadsheet_Excel_Writer 라는 클래스를 사용해야 하는데, pearloader.php 에서 클래스를 동적으로 할당할 경우 다음과 같이 넘기면

$this->pearloader->load ( 'Spreadsheet/Excel', 'Writer' );

파일은 제대로 포함하지만 클래스는 할당되지 못한다. 이런 경우를 위해 pearloader 클래스에서 동적 클래스 할당전에 약간의 트릭을 사용해서 동적할당이 가능하게 하였다.

사용할 PEAR 라이브러리를 모두 위치했다면 이제 사용할 차례이다.

PEAR 라이브러리를 사용할 Controller 나 Model 등에서 다음과 같이 사용한다.

$this->load->library ( 'pearloader' );
$http_request = $this->pearloader->load('HTTP','Request');
$http_request->setURL($url);
$http_request->sendRequest();
echo $http_request->getResponseBody();

끝.. 헉헉.. 글 쓰기 힘들다. CodeIgniter 를 제대로 활용하기 위한 것도 꽤 힘들다..

Codeigniter 에서 세션 사용하기

CodeIgniter 에서 제대로 세션이 동작되지 않는 경우가 있다.

난 비록 얼마 사용하지 않았지만.. 이번에 좀 큰 시스템을 개발 중인데 이같은 문제가 발생해 난감해 하던차에 구글을 뒤져 다음과 같은 코드로 바꿔치기 하면 된다는 사실을 알았다.

단 이때 코드는 system/libraries 에 있는 Session.php 를 다른 이름으로 바꾸고 그 다음에 아래 내용을 Session.php 로 저장해서 넣으면 된다.

즐거운 CodeIgniter 생활이 되기를..


<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Code Igniter
*
* An open source application development framework for PHP 4.3.2 or newer
*
* @package CodeIgniter
* @author Dariusz Debowczyk
* @copyright Copyright (c) 2006, D.Debowczyk
* @license http://www.codeignitor.com/user_guide/license.html
* @link http://www.codeigniter.com
* @since Version 1.0
* @filesource
*/

// ------------------------------------------------------------------------

/**
* Session class using native PHP session features and hardened against session fixation.
*
* @package CodeIgniter
* @subpackage Libraries
* @category Sessions
* @author Dariusz Debowczyk
* @link http://www.codeigniter.com/user_guide/libraries/sessions.html
*/
class CI_Session {

var $flash_key = 'flash'; // prefix for "flash" variables (eg. flash:new:message)

function CI_Session()
{
$this->object =& get_instance();
log_message('debug', "Native_session Class Initialized");
$this->_sess_run();
}

/**
* Regenerates session id
*/
function regenerate_id()
{
// copy old session data, including its id
$old_session_id = session_id();
$old_session_data = $_SESSION;

// regenerate session id and store it
session_regenerate_id();
$new_session_id = session_id();

// switch to the old session and destroy its storage
session_id($old_session_id);
session_destroy();

// switch back to the new session id and send the cookie
session_id($new_session_id);
session_start();

// restore the old session data into the new session
$_SESSION = $old_session_data;

// update the session creation time
$_SESSION['regenerated'] = time();

// session_write_close() patch based on this thread
// http://www.codeigniter.com/forums/viewthread/1624/
// there is a question mark ?? as to side affects

// end the current session and store session data.
session_write_close();
}

/**
* Destroys the session and erases session storage
*/
function destroy()
{
unset($_SESSION);
if ( isset( $_COOKIE[session_name()] ) )
{
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
}

/**
* Reads given session attribute value
*/
function userdata($item)
{
if($item == 'session_id'){ //added for backward-compatibility
return session_id();
}else{
return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
}
}

/**
* Sets session attributes to the given values
*/
function set_userdata($newdata = array(), $newval = '')
{
if (is_string($newdata))
{
$newdata = array($newdata => $newval);
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$_SESSION[$key] = $val;
}
}
}

/**
* Erases given session attributes
*/
function unset_userdata($newdata = array())
{
if (is_string($newdata))
{
$newdata = array($newdata => '');
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
unset($_SESSION[$key]);
}
}
}

/**
* Starts up the session system for current request
*/
function _sess_run()
{
session_start();

$session_id_ttl = $this->object->config->item('sess_expiration');

if (is_numeric($session_id_ttl))
{
if ($session_id_ttl > 0)
{
$this->session_id_ttl = $this->object->config->item('sess_expiration');
}
else
{
$this->session_id_ttl = (60*60*24*365*2);
}
}

// check if session id needs regeneration
if ( $this->_session_id_expired() )
{
// regenerate session id (session data stays the
// same, but old session storage is destroyed)
$this->regenerate_id();
}

// delete old flashdata (from last request)
$this->_flashdata_sweep();

// mark all new flashdata as old (data will be deleted before next request)
$this->_flashdata_mark();
}

/**
* Checks if session has expired
*/
function _session_id_expired()
{
if ( !isset( $_SESSION['regenerated'] ) )
{
$_SESSION['regenerated'] = time();
return false;
}

$expiry_time = time() - $this->session_id_ttl;

if ( $_SESSION['regenerated'] <= $expiry_time )
{
return true;
}

return false;
}

/**
* Sets "flash" data which will be available only in next request (then it will
* be deleted from session). You can use it to implement "Save succeeded" messages
* after redirect.
*/
function set_flashdata($key, $value)
{
$flash_key = $this->flash_key.':new:'.$key;
$this->set_userdata($flash_key, $value);
}

/**
* Keeps existing "flash" data available to next request.
*/
function keep_flashdata($key)
{
$old_flash_key = $this->flash_key.':old:'.$key;
$value = $this->userdata($old_flash_key);

$new_flash_key = $this->flash_key.':new:'.$key;
$this->set_userdata($new_flash_key, $value);
}

/**
* Returns "flash" data for the given key.
*/
function flashdata($key)
{
$flash_key = $this->flash_key.':old:'.$key;
return $this->userdata($flash_key);
}

/**
* PRIVATE: Internal method - marks "flash" session attributes as 'old'
*/
function _flashdata_mark()
{
foreach ($_SESSION as $name => $value)
{
$parts = explode(':new:', $name);
if (is_array($parts) && count($parts) == 2)
{
$new_name = $this->flash_key.':old:'.$parts[1];
$this->set_userdata($new_name, $value);
$this->unset_userdata($name);
}
}
}

/**
* PRIVATE: Internal method - removes "flash" session marked as 'old'
*/
function _flashdata_sweep()
{
foreach ($_SESSION as $name => $value)
{
$parts = explode(':old:', $name);
if (is_array($parts) && count($parts) == 2 && $parts[0] == $this->flash_key)
{
$this->unset_userdata($name);
}
}
}
}
?>

codeigniter library 에서 객체 사용하기

codeigniter 의 library 를 사용자가 임의로 생성할 때 Controller나 Model, View 처럼 모든 상속된 객체를 생성할 순 없게 되어 있다.

따라서 library 에선 다음과 같이 codeigniter 의 모든 객체를 사용할 수 있도록 해주어야 한다.

$obj =& get_instance ();

위와 같이 하면 Controller 나 Model 등에서 다음과 같이 사용하는 것처럼 할 수 있다.

Controller:

$this->session->userdata ( 'id' );

Library:

$obj->session->userdata ( 'id' );

위처럼 사용하면 된다. 다만 library 의 모든 메소드에서 객체를 사용하는 것일 경우 객체의 변수에 담아 다음과 같이 사용할 수 있는 방법도 있겠다.

$this->obj =& get_instance ();

$this->obj->session->userdata ( 'id' );

나머진 취향에^^

codeigniter 에서 Library 폴더를 서브 폴더로 구성해서 사용하기

개인적으로 codeigniter 를 능숙하게 쓰는건 아니지만 조금 큰 규모의 사이트를 제작하다 보니 서브 폴더를 사용해야 했다. 나중에 알고본 사실이지만 다른 문제도 발생했었다^^;
그건 다시 적기로 하고 글을 이어나간다.

controller 에서 library 를 로드할때 다음과 같이 서브 폴더를 포함해 읽어들이도록 하면 에러가 발생한다.

$this->load->library ( 'member/libmember' );

때문에 좀 큰 규모의 설정을 바꿔줘야 한다.

codeigniter 가 설치된 디렉토리에서 다음과 같은 경로를 따라간다.

system/libraries

이 안에 들어가서 Loader.php 를 열고 679 번째 줄을 찾아 다음 내용을 삽입한다.


// Is the class in a sub-folder? If so, parse out the filename and path.
if (strpos($class, '/') === FALSE)
{
$path2 = '';

}
else
{
$x = explode('/', $class);

$class = end($x);

unset($x[count($x)-1]);

$path2 = implode('/', $x).'/';

}


그리고 나서 다음 내용을 아래와 같이 수정한다.

수정전 :

// Is this a class extension request?
if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT))
{
if ( ! file_exists(BASEPATH.'libraries/'.ucfirst($class).EXT))
{
log_message('error', "Unable to load the requested class: ".$class);
show_error("Unable to load the requested class: ".$class);
}

include(BASEPATH.'libraries/'.ucfirst($class).EXT);
include(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT);

return $this->_ci_init_class($class, config_item('subclass_prefix'), $params);
}


수정후 :

// Is this a class extension request?
if (file_exists(APPPATH.'libraries/'.$path2.config_item('subclass_prefix').$class.EXT))
{
if ( ! file_exists(BASEPATH.'libraries/'.$path2.ucfirst($class).EXT))
{
log_message('error', "Unable to load the requested class: ".$class);
show_error("Unable to load the requested class: ".$class);
}

include(BASEPATH.'libraries/'.$path2.ucfirst($class).EXT);
include(APPPATH.'libraries/'.$path2.config_item('subclass_prefix').$class.EXT);

return $this->_ci_init_class($class, config_item('subclass_prefix'), $params);
}


그리고 다음 줄을 찾아서 수정후로 바꿔준다.

수정전 :

$fp = $path.'libraries/'.$class.EXT;

수정후 :

$fp = $path.'libraries/'.$path2.$class.EXT;

이렇게 해주면 다음과 같이 가능하다.

libraries/member/libmember.php 파일이 있다면

라이브러리 로드시에 다음과 같이 사용해도 에러가 나지 않는다.

$this->load->library ( 'member/libmember' );

만약 위처럼 수정하지 않는다면 라이브러리는 서브폴더를 사용하지 못하게 된다.

목요일, 8월 9, 2007

본사 복귀를 결정했다.

이유가 어찌됐든 난 협박에 놀아난 꼴이고 그들의 손아귀에서 그들이 되길 원하는 시나리오에 말려들었다.

후훗 이럴줄 알았으면 차라리 3월에 때려칠껄 그랬다.

그땐 기회라도 있었는데, 모든지 때라는게 있는 모양이다.

그 때 라는 것을 놓쳐버리면 안된다.


1. 회사에 끌려다니는 모습을 보이지 말라
2. 때를 놓치지 말고 해라
3. 고민은 많이하고 깊이 하는 것은 중요한데 선택은 빨리할수록 좋다. 그만큼 기회가 많으니까
4. 결정은 내 몫이고 바보같이 행동하지 마라.
5. 남에게 나를 공격할 기회를 주지 마라. 사람은 기회가 있을 때 공격한다.
6. 상사가 배신감을 느끼지 않도록 해라

수요일, 8월 8, 2007

뭐 이런 뭐 같은 경우가 다 있지..

오늘 그동안 미루고 미루어졌던 상여금이 지급되었는데 분명 월급 명세서엔 다 찍혀 있으면서 왜 반만 주냐고 -_-
윗선의 지시라고 하더라도, 대기발령도 극도로 억울해죽겠는데 장난하는 것도 아니고 낼 전화오면 한판 해야겠다.

그리고 바로 사표쓰고 나오는게 낫지. 지금 나보고 일할 기회를 줄테니까 꿇리고 들어오란 소리 밖에 안되잖나..
허허 이것참..

죄명 : 성희롱

법이란 이름의 심판대는 정말 무섭다.

근데 성희롱이란 죄는 왜 그리도 무서운건지... 난 죄를 짓지 않았다. 그러나 내가 죄짓지 않았다고 누가 믿어주겠는가.
아마 소수 일것이다. 나를 아는 사람들은 절대 그렇게 보지 않지만 세상은 날 그렇게 본다.

그게 죄라는 이름의 악명이 아닐까..

화요일, 8월 7, 2007

회사에서 아주 불미스런 일로 대기발령된지 벌써 한 주가 지나갔다.
잠시 동안 개인적으로 끄적여 볼 게시판 같은 녀석이 필요했기에 freshmeat 을 대충 뒤졌다.

뭐라고 난 말해야 하는 걸까..

그렇게 했던게 내 죄가 아니라고..? 뭐 이렇게 말한다 한들 무슨 소용이 있겠는가 싶지만 서도
글쎄.. 이것도 직장생활에서 숨은 비화가 아닐까..

오늘은 설치만 하고 잔다는게 마저 끄적거리고 간다..

낼 오라니.. ㅋㅋ