'gtk2'에 해당되는 글 6건

  1. 2009.03.14 ID 및 PASSWORD 인증 설정
  2. 2009.03.03 Perl diary - 세번째 이야기
  3. 2009.02.28 Perl diary - 두번째 이야기
  4. 2008.11.23 perl을 사용한 HTML Parser
  5. 2008.10.31 Chapter 5. Moving On
  6. 2008.10.12 음악을 들어보자 #3 (5)

Naver Perl Community & Study Cafe


2009.03.14 04:30

ID 및 PASSWORD 인증 설정


- Id와 비밀번호 인증 설정하기



여러 인증방법을 생각해보다가... MD5 hash + base64 를 선택했다.

perl에는 Digest::MD5 모듈이 존재함으로 쉽게 MD5 hash가 쉽게 설정 가능하다.

거기다 코어모듈이니 설치할 필요도 없으니 금상첨화 !!

밑의 두 방법중 하나를 선택하여 $data에 값을 넣고 모듈을 사용하면,

원하는 값으로 변환된다.
 # Functional style
 use Digest::MD5 qw(md5 md5_hex md5_base64);

 $digest = md5($data);
 $digest = md5_hex($data);
 $digest = md5_base64($data);

 # OO style
 use Digest::MD5;

 $ctx = Digest::MD5->new;

 $ctx->add($data);
 $ctx->addfile(*FILE);

 $digest = $ctx->digest;
 $digest = $ctx->hexdigest;
 $digest = $ctx->b64digest;


이제 인증부분을 처리하는 방법에 대해서 한번 생각해보자.

첫번째, id와 비밀번호에 아무값도 입력되지 않았을 때

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$id =~ s/ //g; #스페이스 공백 제거
if($id eq ''){
	show_message_dialog($window, #에러메세지 출력
	$m_type->{'nick'},		
	$error_msg{id_empty},
	'ok');
} elsif($passwd eq ''){ show_message_dialog($window, $m_type->{'nick'}, $error_msg{pw_empty}, 'ok'); }

간단하게 $id 부분만 공백을 제거했는데

특수문자 사용으로 문제가 될 경우에는 위쪽에 치환구문에서 제어 가능하다.


웹상이 아닌 시스템에서 동작하는 레벨은 데이터 베이스를 연동한 것도 아니고...

마땅히 취약점이 없는 듯 했다. (나야 다 알고 있지만...)




두번째, id가 존재하지 않을때

id가 존재하는지에 대한 여부는

입력한 ID의 폴더가 존재하느냐 존재하지 않느냐에 따라서 결정된다.

ID의 폴더는 MD5 hash + base64 사용하여 해쉬를 시켜 폴더이름을 만들었으며,

파일안에 있는 userinfo.dat 파일을 읽어오도록 설정하였다.

폴더가 없을시 아래 문구를 출력한다.




세번째, id는 존재하는데 password가 맞지 않을 때

ID가 존재한다면 password가 저장된 userinfo.dat 파일을 읽어와서

사용자가 입력한 패스워드와 비교해서 맞을때만 인증 되도록 한다.

그렇지 않을시에는 아래와 같은 문구를 출력한다.



팁으로 위의 두 창의 내용대로 문구가 출력된다면,

이런경우는 ID를 유추할 수 있으므로,

"ID 또는 Password가 틀렸습니다" 라는 문구가 옳다.




개인적인 생각으로 만들고 정리해 본 터라

뭔가를 많이 빠뜨린 느낌이 든다.

입력값의 길이 설정은 id 와 password 입력창에서 제어가 가능하고,

로컬상에서는 마땅히 더 설정할 꺼리가 있으려나?

부족한 부분이 있다면 댓글좀 달아주세요^^




JEEN님이 소개해주신 id와 password을 편리하게 제어하는 모듈인

FormValidator::Simple 도 다음에 기회가 된다면


연구해 봐야 할 듯.



이번 포기 사유는....


기본 CGI 예제에다가 의존모듈이 많고, 윈도우 설치가 계속 에러뜨는 관계로 인해...

ㅠ_ㅠ
신고
Trackback 0 Comment 0
2009.03.03 02:13

Perl diary - 세번째 이야기


기본적인 배너가 필요하여 포토샵으로 재빠르게 작성해 보았다.

20분 정도 걸린듯... 후다닥 만든것 치고는 꾀 잘 만들어 졌다는 느낌이 든다.


프로그램 코드를 짜는것과 이미지를 만드는것은 

무에서 유를 만들어내는 창조적인 작업이라는 점에서 동일하다.


예전에는 살아가면서 악기 하나는 꼭 배워둬라 하고 옛 어른들이 말씀하셨는데

나는 프로그래밍은 꼭 하나정도는 배워둬라 라고 이야기 하고싶다.


자신이 쓸 프로그램을 자신이 만든다는것은 얼마나 흥미로운 일인가? ^^



시간 출력과 상태 BAR를 연동하여 어디까지 출력되었는지 알 수 있도록 수정을 하였다.

아무리 봐도... 레이아웃의 이미지를 씌우지 않는 이상은 상용적인 다이어리 feel이 나지는 않을듯...




신고
Trackback 0 Comment 0
2009.02.28 23:04

Perl diary - 두번째 이야기



다이어리를 세부적으로 조금씩 고치고 있다.

하루에 시간을 정해서 몇개의 파일만 슥삭슥삭 고치고 있는데...

너무 많이 고쳐버리면 머리 아프니 적당한 선 까지만 수정하곤 한다.


이전에 MP3 Player 코드가 너무 막코딩이라

리팩토링.... 

이전의 코드를 뒤엎어서 다시 코딩을 했다.




외관적으로 별로 바뀐것은 없지만

세부적인 안의 내용들은 많은 변경이 있었다.

잘보면 메뉴도 떡하니 있는...


달력을 더블클릭을 하게 되면 해당 날짜로 접근해서 파일을 읽어오기까지!!

Information에 현재 Play 되고 있는 시간과 플레이가 끝나면 다음곡으로 넘어가는 것까지 구현!


완성도가 점점 높아지는듯... 

이제 메인창 구성에 대해서 신경써봐야 겠다.



ALL 수작업 중이지만 비주얼 베이직 삘이 나는 이유는 뭘까??

나중에 겉을 좀 이쁘게 꾸며야 고급스러워질 듯...
신고
Trackback 4 Comment 0
2008.11.23 16:03

perl을 사용한 HTML Parser


얼마전에 KISC에 놀러갔더니 

카페 스텝분이신 이창민(miniuslab)님이 html_parser을

만드신 것을 보고 영감을 얻었다.



perl로 만들어도 괜찮겠다 싶어서...

어제 gtk를 사용하여 약 1시간정도만에 후다닥 만들어보았다 ㅋㅋ (나는 따라쟁이 ;;)

사실... 원리를 아시는 분에게는 이정도야 껌이라고 하실듯...

LWP::Simple 모듈을 사용하면... 금방 만들어 진다..

헤더정도 따위는 없....


처음 실행한 메인화면이다.

타이틀 아이콘 고르는것에 10분이상 투자를 했다.. 결국 파란 별을... ㅡㅡ;



gtk2_textview.pl 을 참고해서 만들었으며

Editable 같은 옵션들이 맘에들어 그대로 남겨 두었다.

나같은 경우에는 URL로 소스를 먼저 얻은 후에, 

정규식을 사용해서 다시 추출을 하도록 만들었는데...

한번 테스트를 해보자.



막상 만들고 보니 Entry 창을 너무 작게 만들어서 url이 짤리는것 것이 아쉽다.

정규표현식 문법이 틀리거나 , URL의 형식이 맞지않게 입력되면 경고창을 띄운다던지.. 

그런 세부적인 코드들은 따로 개선을 해야될 듯 하다.


약 200줄정도의 코드로 이런 프로그램을 만들 수 있는 perl이 대단하다. (더 줄일수도 있겠지만..)

C로 만들었으면...

상상이 안가는...1人...
신고
Trackback 0 Comment 0
2008.10.31 11:23

Chapter 5. Moving On

1. More on Signal Handlers - 스킵 +_+ 쿠쿠쿠

2. An Upgrade Hello World

얼마전에 만든 Hello world 를 개선시키고 콜백함수에 대한 예제도 함께 만들어보자.

예제와 함께 위젯 패킹도 소개할 것이다.



 
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';

# 새로운 콜백함수 이 함수는 데이터를 전달한다 

# 모니터로 문자열을 출력해준다.
sub callback
{
	my ($button, $data) = @_;
	
	print "Hello again - $data was pressed\n";
}

# 다른 콜백함수
sub delete_event
{
	Gtk2->main_quit;
	return FALSE;
}

# 새로운 윈도우를 만든다.
$window = Gtk2::Window->new('toplevel');

# 만든 윈도우의 제목을 적는다.
# 윈도우 창의 이름은 "Hello Buttons!"
$window->set_title("Hello Buttons!");

# 여기서 delete_event 에 대한 처리를 설정한다

# exits GTK.
$window->signal_connect(delete_event => \&delete_event);

# 윈도우의 테두리 너비를 조정한다.
$window->set_border_width(10);

# 우리는 위젯을 팩으로 하여 상자를 하나 만든다. 이것을 자세하게 설명하자면

# packing은 section이다. 이 박스는 실제로는 눈에 보이진 않는다.

# 이것은 단지 위젯을 쓰기 위한 도구로만 사용이 된다. $box1 = Gtk2::HBox->new(FALSE, 0); # 메인 윈도우에 이 상자를 넣는다. $window->add($box1); # 새로운 버튼을 만들고 레이블을 "Button 1"로 설정한다 $button = Gtk2::Button->new("Button 1"); # 이제 버튼을 클릭했을 때, 콜백함수를 호출하도록 설정한다. # 인수로는 "button 1" 이라는 문자열 넣어서 호출하겠다. $button->signal_connect(clicked => \&callback, 'button 1'); # Gtk2::Container::add 모듈 대신 , pack 눈에 보이지 않게 버튼을 안에다 넣는다. # 박스는 윈도우안에 속하게 되었다. $box1->pack_start($button, TRUE, TRUE, 0); # 이것은 GTK 를 위한 준비단계를 말하는것이기 때문에 이 단계를 항상 기억해야 한다. # 버튼이 완료되었고 이제 버튼을 출력 할 수 있다. $button->show; # 두번째 버튼은 동일하게 만들어 주면 된다. $button = Gtk2::Button->new("Button 2"); # 같은 콜백 함수를 호출 하지만 다른 인자값을 넘긴다. # "button 2" instead. $button->signal_connect(clicked => \&callback, 'button 2'); $box1->pack_start($button, TRUE, TRUE, 0); # 버튼들을 보여주는 순서들이 중요하지는 않지만 # 윈도우의 마지막부분에 한번에 모두 보여주는것을 추천한다. $button->show; $box1->show; $window->show; # Rest in main and wait for the fun to begin! Gtk2->main; 0;


원문 코드 :  http://codepad.org/9b14DmH8


- 출력화면

- Button1 과 Button2를 각각 클릭





처음 GTK를 접하고 버튼 2개를 만드려고 했을 때 위젯 구조를 무시한 채

 
$button = Gtk2::Button->new("Hello World");
$button->signal_connect(clicked => \&hello, $window);
$window->add($button);
$button->show;

$button1 = Gtk2::Button->new("Hello World");
$button1->signal_connect(clicked => \&hello, $window);
$window->add($button1);
$button1->show;

단순히 이런식으로 버튼 2개만 만들면 되겠지... 생각했었다.

하지만 왠걸 OTL...

아무리 수를 써도 버튼 2개가 만들어 지지 않는 것이었다.

버튼 2개를 만드는 것이 이렇게 힘든것인가.. 생각했던 추억이.. 덜덜;;



위의 예제를 응용하여 여러버튼을 나열해 보았다.

Button이라는 함수를 선언하여 버튼을 효율적으로 생성하도록 하였으며

VBox와 HBox를 적절하게 배분하였다.






use Glib qw/TRUE FALSE/;
use Gtk2 '-init';

sub callback
{
	my ($button, $data) = @_;	
	print "Hello again - $data was pressed\n";
}
sub delete_event
{
	Gtk2->main_quit;
	return FALSE;
}

sub Button{
	my $title = shift;
	my $box = shift;
	$button = Gtk2::Button->new($title);
	$button->signal_connect(clicked => \&callback, $title);
	$box->pack_start($button, TRUE, TRUE, 0);
	$button->show;	
	$box->show;
}

$window = Gtk2::Window->new('toplevel');
$window->set_title("Hello Buttons!");
$window->signal_connect(delete_event => \&delete_event);
$window->set_border_width(20);

$box = Gtk2::VBox->new(FALSE, 0);
$window->add($box);

$box1 = Gtk2::VBox->new(FALSE, 0);
$box->add($box1);

$box2 = Gtk2::HBox->new(FALSE, 0);
$box->add($box2);

$box3 = Gtk2::HBox->new(FALSE, 0);
$box->add($box3);

foreach my $index(1..3){	
	Button('Box1-'.$index,$box1);
}
foreach my $index(1..2){	
	Button('Box2-'.$index,$box2);
}
foreach my $index(1..5){	
	Button('Box3-'.$index,$box3);
}
$box->show;
$window->show;
Gtk2->main;

0;




원문 코드 : http://codepad.org/MWIvpw5j


예전에 Perl 새미나때 Keedi님의 자료 중 위젯구조에 대한 언급이 있었다.

http://event.perl.kr/kpw2008/presentations/cross_platform_gui_environment_with_gtk2_perl/

= 131페이지

상속받은 자식 위젯은 부모 위젯의 메소드를 사용할 수 있다!

지금은 이해가 가지만... 이 자료를 읽을 당시에는 음냐음냐...


추상적으로 표현하자면 예전에는 희미했던 그림이 이제는 점점 선명하게 보이고 있다.

시간을 쪼개어 꾸준히 연구하자.
신고
Trackback 0 Comment 0
2008.10.12 18:16

음악을 들어보자 #3

초안을 한번 잡아 보려고 한다.

GTK2를 사용해서 이것저것 만들다보니 전체 틀이 나왔다.

각각의 객체를 접근하는 부분이 까다로워 고민이 들지만...

한시간만에 이렇게 만들었다는 것이 나조차도 믿기지는 않지만;; 

GTK2의 위대함을 엿볼 수 있는 단편적인 부분이기도 하다.

사실.. 슥삭슥삭 그려넣는... MFC와 비베가 훨신 더 편하기도... ㅡ.ㅠ





구간반복을 빼먹었...

신고
Trackback 0 Comment 5