Apr 192012
 

Windows Vista부터 윈도우 사이드바를 통해서 가젯(Gadget)을 지원하고 있습니다.
특히 대형 화면 혹은 와이드 화면을 사용할 경우에 편리합니다.

이러한 가젯을 만들어서 판매를 하는 곳도 있지만, 프로그램을 했던 사람들은 간단히 만들어서 사용을 할수 있습니다.
아래는 운영체제에 기본으로 포함되어 있는 가젯들의 위치이며, 확인을 해보면 xml, html, css, javascript로 이루어져 있는 것을 확인할 수 있습니다.

다른 가젯 프로그램도 인터넷에서 다운을 받으면 확장자가 gadget 이지만, 실제적으로 zip으로 압축이 되어 있는 형태입니다.
그래서 확장자를 변경후에 압축을 풀어서 내부 내용을 참고해서 개발이 가능합니다.

개발에 대한 개념은 아래의 사이트를 한번만 읽어보면 쉽게 이해가 됩니다.

http://msdn.microsoft.com/ko-kr/magazine/cc163370.aspx

참고로 웹에서 다운로드 서비스를 제공하고자 한다면 .gadget에 대해서 아래와 같은 형식의 MIME을 제공해야만 윈도우 운영체제에서 인식이 됩니다.

application/x-windows-gadget

Print Friendly
Apr 182012
 

예전부터 네트워크 프로그램을 많이 작성을 하면서 pcap 라이브러리를 이용해서 패킷캡쳐를 했었다.

http://luca.ntop.org/Ring.pdf

하지만 우연한 기회에 위의 논문에서 PF_RING이라는 방식으로 패킷을 캡쳐하면 패킷 캡쳐 효율이 보다 좋다는 것을 알게 되었다. 대부분 응용프로그램을 감시하는 프로그램에서는 기존의 방식으로도 충분하겠지만, 100M 이상의 네트워크를 처리하거나, 네트워크에서 모니터링을 목적으로 만든 장비에서는 중요한 항목이 될수 있으므로 관심을 가지게 되었다.
그래서 공개된 소스로 원리를 파악하고 기존의 프로그램을 업데이트의 필요성을 느끼게 되었다.

일단 아래의 사이트에서 PF_RING 커널 모듈을 따라서 설치하면 쉽게 설치를 할수 있다.

http://www.ntop.org/get-started/download/

kernel-devel 패키지가 설치가 되어 있는 경우라면 쉽게 컴파일을 해서 pf_ring.ko 파일 만들기가 되므로, insmod 명령어로 커널에 모듈로 올리면 된다.

[root@localhost PF_RING]# lsmod |grep pf_ring
pf_ring               365711  0

그리고 SVN 서버에서 usermode 프로그램 예제도 같이 들어가 있어서 소스도 확인을 할수 있고, 또한 샘플 프로그램도 확인이 가능하다. 그리고 pf_ring 을 사용하는 tcpdump 프로그램도 들어가 있는 것을 확인할 수 있다.

[root@localhost examples]# ./pcount
Capturing from eth0
=========================
Absolute Stats: [48 pkts rcvd][0 pkts dropped]
Total Pkts=48/Dropped=0.0 %
48 pkts [49.7 pkt/sec] - 2880 bytes [0.02 Mbit/sec]
=========================
=========================
Absolute Stats: [108 pkts rcvd][0 pkts dropped]
Total Pkts=108/Dropped=0.0 %
108 pkts [54.9 pkt/sec] - 6716 bytes [0.03 Mbit/sec]
=========================
Actual Stats: 108 pkts [1000.1 ms][107.98 pkt/sec]
=========================
=========================
Absolute Stats: [158 pkts rcvd][0 pkts dropped]
Total Pkts=158/Dropped=0.0 %
158 pkts [53.3 pkt/sec] - 10032 bytes [0.03 Mbit/sec]
=========================
Actual Stats: 50 pkts [1000.1 ms][50.00 pkt/sec]
=========================

소스를 확인해보면 기존의 라이브러리 대신에 소스에 포함되어 있는 pfring과 pcap 라이브러리를 사용해서 컴파일을 하면 된다.

[root@localhost userland]# ldd examples/pcount
        linux-vdso.so.1 =>  (0x00007fffaf179000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003664800000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003664000000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003663800000)
[root@localhost userland]# ls -al libpcap/libpcap.a
-rw-r--r-- 1 root root 401912 2012-04-18 18:19 libpcap/libpcap.a
[root@localhost userland]# ls -al lib/libpfring.a
-rw-r--r-- 1 root root 172836 2012-04-18 18:18 lib/libpfring.a

[root@localhost userland]# cd examples/
[root@localhost examples]# touch pcount.c
[root@localhost examples]# make
gcc  -O2 -Wall -I../../kernel -I../../kernel/plugins -I../lib -I../libpcap-1.1.1-ring  -D HAVE_ZERO -O2  -c pcount.c -o pcount.o
gcc  -O2 -Wall -I../../kernel -I../../kernel/plugins -I../lib -I../libpcap-1.1.1-ring  -D HAVE_ZERO -O2  pcount.o ../libpcap-1.1.1-ring/libpcap.a   ../lib/libpfring.a  -lpthread  -L../libpcap -lpcap   -o pcount
Print Friendly
Apr 092012
 

PHP에서는 PHPMailer라는 프로그램을 이용해서 메일을 쉽게 다양한 서버 메일서버로 보낼수가 있었습니다.

Java로 프로그램을 작성하다가 로그는 log4j를 이용해서 파일로 저장을 하면 되겠지만, 특정 이벤트가 일어날 경우에는 운영자에게 메일로 통보하는 기능을 만들려고 하다가 검색한 것이 JavaMail API 입니다.

정말 다양한 기능을 제공하고 있으며, 샘플 프로그램으로 메일클라이언트, 웹메일등등 다양하게 공개가 되어 있습니다.

http://www.oracle.com/technetwork/java/index-138643.html

샘플 프로그램을 구해서 보면 쉽게 되겠지만, 아래와 같이 Properties 클래스에 메일 서버의 설정값을 넣어서 Session 클래스를 만들어서 사용을 하면 됩니다. gmail 과 같은 공개 메일서버들은 TLS/SSL, 아이디, 패스워드 인증을 사용합니다. 직접구현을 할려면 신경을 좀 써야 하겠지만, 아래와 같이 쉽게 설정으로 해결이 가능합니다.

                        Properties props = System.getProperties();
			props.put("mail.smtp.host", dnsagent.MailHost);
			props.put("mail.smtp.auth", "true");
 
			Session session = Session.getInstance(props, 
					new javax.mail.Authenticator() {
						protected PasswordAuthentication getPasswordAuthentication() {
							return new PasswordAuthentication(dnsagent.AuthId, dnsagent.AuthPw);
						}
					}
			);
			if (dnsagent.debug==true) {	session.setDebug(true); }

그리고 나면 아래와 같이 Message를 만들어서 SMTP서버로 전송을 하면 메일이 발송이 됩니다.

Message msg = new MimeMessage(session);
.......
Transport.send(msg);

쉽게 개발이 가능하며, 다만 500k 정도의 mail.jar 파일만 첨부하여 사용하면 됩니다.

Print Friendly
Apr 052012
 

공공 개발을 하다 보면 행정 시스템과 연동해서 개발해야 하는 경우가 발생합니다.

기본적으로 행정 시스템에 직접 접속할수 없기 때문에 SOAP 기반의 웹서비스(WSDL)을 기반으로 데이타를 요청하고, 수신해야 합니다.

이를 위해서는 담당 공무원이 새올행정 통합지원센터를 통해서 연계아이디를 발급받고, 코드를 발급받아야 합니다.
그리고 연동 담당자와 각 서비스별로 담당자와 연계 쿼리를 발급받고, 해당 정보를 담아서 서비스로 받아야 합니다.
(여기서부터 자연스럽게 연계담당자와 통화를 좀 많이 하셔야 합니다. -_-)

나머지는 메뉴얼을 보고 연계를 하면 되지만, 처음 개념을 알지 못하면 정말 힘든 작업입니다.
그리고 중요한 것은 웹서비스(WSDL)로 통신을 하기 때문에 요청할떄 MIME 유형과 encoding 형태를 잘 맞춰야 합니다.

많이 사용하는 AXIS등을 사용하기 위해서는 웹서버의 환경과 연계서버의 환경을 잘 고려해야 합니다.
(초기에 연계서버를 개발할때 개발용 PC환경, 개발서비스 시스템과 실서비스가 환경이 모두 달라서 여러 경험을 했었습니다. 만약 해당 사항이 맞지 않으면 HTTP 500 Response가 나오기 때문에 무엇 때문에 오류인지도 모르고 고생하는 경우가 발생됩니다.)

무식한 저는 이런 고생을 많이 했고, 짧은 기간에 프로젝트를 완료해야 했기 때문에 서버의 상태를 검증하기 보다는 프로젝트 완료를 빨리 진행하기 위해서 웹클라이언트를 만들어서 처리를 빨리 했습니다. -_-

아래와 같이 Connection을 만들고, 직접 XML을 생성해서 보내는 방식이죠.

URL url = new URL(“http://”);
URLConnection con = url.openConnection();
con.addRequestProperty(“SOAPAction”,”");
con.setRequestProperty(“Content-Type”,”text/xml; charset=euc-kr”);
con.setDoOutput(true);

다시 받은 데이타도 XML을 파싱루틴도 만들어서 처리를 하면 됩니다.

하지만 또 하나의 난관은 개인정보가 될만한 사항이 있는 것은 GPKI 통신을 해야 합니다.
이를 위해서는 추가적으로 GPKI 서버용 인증 코드를 발급받아서 새올연동 서버에 등록을 해야 합니다.
그리고는 LDAP을 통해서 연계할 서버의 공개키블 받아서 저장해두고, 해당 키들로 초기화를 해야 합니다. 그런 다음 만든 XML의 일부분을 GPKI encode를 해서 전달하고, 받은 데이타의 일부분을 decode 해서 확인을 해야 합니다.
(샘플 프로그램에도 있지만, 암호화되 데이타는 base64로 encode를 해야 하며, 복호화할때에도 base64로 decode를 먼저 한 다음에 해야 합니다.)

주의할 점은 Java용 GPKI 모듈은 JNI 를 사용하기 때문에 OS에 맞는 버전으로 설치를 해야 하며, 서버에 미리 설치해서 검증을 할 수 있습니다.
또 새올행정 서버의 공개키를 받을때는 샘플 프로그램을 이용하는 방법도 있지만, LDAP 클라이언트를 하나 구해서 저장하는 방식이 더 편리합니다.
(저는 잘 몰라서 2가지 방법 모두 했습니다. -_-)

실제로 개발보다는 연동을 하기 위해서 연계팀과 진행해야 할 부분이 많으며, 경험이 있다면 쉽지만, 그렇지 않으면 처음에는 조금 고생을 하셔야 합니다.

Print Friendly
Apr 032012
 

UNIX에서 vi의 syntax 기능을 사용했던 개발자라면 syntax highlight 기능을 잘 알것입니다.

최근에 블로그에서도 웹기반의 소스를 아래와 같이 이쁘게 나오게 합니다.
(아래는 WP-Syntax라는 GeSHi 기반의 WordPress 플러그인입니다.)

<html>
 <head>
  <title>title</title>
 </head>

이것을 가능하게 하는 것이 GeSHi 라는 PHP 기반의 오픈소스가 있습니다.

http://qbnz.com/highlighter/

저도 제 블로그 사이트에 아래 링크로 샘플 사이트를 연결해 두었습니다.

http://blog.sukmoonlee.com/geshi/contrib/example.php

소스를 받아서 샘플 파일을 보시면 PHP 개발자라면 금방 사용할수 있으므로 참고하시면 좋습니다.

Print Friendly
Plugin from the creators of Brindes :: More at Plulz Wordpress Plugins