2007년 12월 27일 목요일

Spring에서 Gmail SMTP서버를 이용하여 메일 보내기

Spring에서 Gmail SMTP서버를 이용한 메일 발송 구현하기

단순 텍스트 메일이 아닌 MIME타입의 메일을 보내기 위해서는 오로지 Spring만으로 구현이 불가능 합니다. 여러가지 문서를 참고한 결과 Java Mail과 Spring을 적절히 활용하면 MIME 타입의 메일을 쉽게 보낼수가 있음을 파악할수 있었습니다.
Spring 클래스들을 살펴보면 JavaMail과의 연동 및 확장가능성을 지원해주기 위하여
JavaMailSenderImplMimeMessageHelper 등과 같은 다양한 클래스들을 지원해주고 있습니다.

일단 AbstractMailSender라는 추상화 메일 센더 클래스를 만듭니다.

import javax.mail.MessagingException;

import org.springframework.mail.javamail.JavaMailSender;

/**
 * @author Leegun
 *
 */
public abstract class AbstractMailSender
{
 protected JavaMailSender sender;
 
 public void setSender(JavaMailSender sender) {
  this.sender = sender;
 }
 
 public abstract void sendMail( String to, String from,
      String subject, String text ) throws MessagingException;
 

}

다음은 메일 인증을 담당하고 있는 JavaMailAuthenticator 클래스를 만듭니다.
기존에 Java에서 지원해주고 있는 메일 인증 모듈을 그대로 사용하기 위하여 JavaMailSenderImpl 클래스를 상속받아서 구현을 시도합니다.

import java.util.Properties;

import org.springframework.mail.javamail.JavaMailSenderImpl;

/**
 * @author Leegun
 *
 */
public class JavaMailAuthenticator extends
JavaMailSenderImpl
{
 public JavaMailAuthenticator()
 {
  super();
  Properties props = new Properties();
  props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.auth", "true");
  this.setJavaMailProperties(props);
 }
}

마지막으로 실제 전송해야 할 메일 내용및 To, From 과 같은 기본 사항들을 설정해줍니다.
MIME타입의 메일을 보내기 위하여 MimeMessageHelper 클래스를 사용합니다.

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.MimeMessageHelper;

/**
 * @author Leegun
 *
 */
public class MimeMailSender extends AbstractMailSender
{
 // 메일 전송시 오류가 발생하면 MessagingException을 던진다.
 public void sendMail( String to, String from,
      String subject, String text ) throws MessagingException
 {
  MimeMessage msg = sender.createMimeMessage();
 
  // true를 세팅함으로써 메일 포맷의 다양화를 지원하겠다는것을 명시적으로 세팅해준다.
  MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8");
 
  helper.setTo(to);
  helper.setFrom(from);
  helper.setSubject(subject);
  helper.setText(text);
 
  sender.send(msg);
 }
}

마지막으로 ApplicationContext 에 관련 빈들을 설정해줍니다.

<beans>
 <bean id="javaMailSender" class="mypackage.JavaMailAuthenticator">
  <property name="host" value="smtp.gmail.com" />
  <property name="port" value="465" />
  <property name="protocol" value="smtps" />
  <property name="username" value="
계정아이디@gmail.com">
  <property name="password" value="비밀번호"/>
 </bean>
 
 <bean id="mimeMailSender" class="mypackage.MimeMailSender">
  <property name="sender">
   <ref bean="javaMailSender"/>
  </property>
 </bean>
</beans>

실제 사용은 아래와 같이 하면 됩니다.

ApplicationContext ctx = new ClassPathXmlApplicationContext( new String[] {"applicationContext.xml"});
MimeMailSender sender = (MimeMailSender) ctx.getBean("mimeMailSender");
 
  try {
   sender.sendMail("받는 사람 메일주소", "보내는 사람 메일 주소", "핼러우 스프링", "핼러우 스프링? 응?");
  } catch (MessagingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

Spring 에서 Java Mail 사용시 에러문

Spring에서 Java Mail을 이용하여 메일 데몬을 작성시 이상한 에러문구가 떴었다.


ApplicationContext에서는 아래와 같이 설정을 했었다.


<beans>
<bean id="javaMailSender"
  class="com.nanumsem.nnserp.common.util.AuthenticatedJavaMailSender">
  <property name="host">
   <value>smtp.xxxx.com</value>
  </property>
  <property name="username">
   <value>xxxxx</value>
  </property>
  <property name="password">
   <value>xxxxx</value>
  </property>
</bean>

<bean id="mimeMailSender" class="com.nanumsem.nnserp.common.util.MimeMailSender">
  <property name="sender">
   <ref bean="javaMailSender"/>
  </property>
</bean>
</beans>

그런데 실제 Tomcat 기동시
java.lang.NoClassDefFoundError: javax/mail/MessagingException
이런 에러 문구가 뜨면서 javaMailSender 빈인스턴스 생성시 실패하게 된다.

분석한 결과 Spring내에는 실제 Mail처리 관련 jar파일이 포함이 되어있지 않다는것이다.
Spring에서 Mail관련 기능을  구현하기 위해서는 별도로 J2EE 에 포함된 mail.jar를 필요로 하고 있다.

sun에서 mail.jar를 다운로드 받아 WEB-INF/lib 속에 넣고 다시 빌드를 했더니 그제야 정상적으로 빈을 생성하면서 기동되였다.

2007년 12월 21일 금요일

파일명에 따른 동영상 화질정보와 DVD용어정리

『한글제목-영어제목-제작년도-원본소스-영상코덱-음성코덱-영상갯수-릴리즈그룹명』순

※원본 소스에 따라 화질 차이가 납니다.
예) 스타더스트.Stardust.2007.CAM.XviD.CD2-JJxvid.avi
스타더스트.Stardust.2007.TS.XviD-DELAY.avi
댄서의 순정.2005.VHSRip.DivX.CD1-MCH.avi
해리 포터와 불사조 기사단.2007.TC.XViD.CD2-mVs.avi  
해피 피트.Happy.Feet.2006.DVDSCR.XviD.AC3.CD2-TCRO.avi
한니발 라이징.Hannibal.Rising.2007.R5.x264.AC3.5.1CH-TN.avi
Spider.Man.3.2007.DVDRip.XviD.AC3.CD1FLAiTE.avi
                                           
CAM<TS<VHSRip<TC<DVDSCR<R5<DVDRip

(DVDSCR까지는 DVDRip 화질과 크게 다르지않으며 TC부터 감상용으로 볼만합니다)             

1.CAM    
극장에서 직접 캠코더로 녹화한 것. 화질과 소리 상태가 어둡고 나쁜편.
감상용으로도 무리가 있으나, 흥행인기작인경우 파일로 올라옵니다.

2.TS (TeleSync)
화질은 캠버전과 같으나, 음성은 별도로 녹음해서 인코딩한것으로 잡음이 없습니다.

3.VHSRip
비디오테잎을 립한것. 캠보다 화질향상.

4.TC(TeleCine)
직접 영화필름에서 추출해 인코딩한것으로,
퀄러티는 VHS(비디오테잎)수준이거나 좋은소스로 잘 뽑으면 그 이상 화질도 보여주며.
캠버젼이나 TS보다 확실히 뛰어나고 소스에 따라 화질차이가 심합니다.

5.DVDSCR (Screener)
영화가 정식출시되기 전에 극장으로 배포되는 홍보용 DVD에서 동영상을 추출.
DVD와 화질동일하나 복사금지경고문구가 뜨거나 간혹 흑백화면이 나옵니다.

6.R5
동구권(동유럽.구소련)쪽 Retail.(지역코드 R5)
DVD보다 빠르고 저렴한 포맷.(비품DVD)
Retail 버전이라 할지라도 R1(북미)쪽보다 화질이 떨어진다고해서
DVDRip이란 말대신 R5란 특정용어를 쓰기로 약정.
정식발매 DVD와 화질은 크게 떨어지지 않지만 이미지 프로세싱과 부록영상등이 생략됩니다.
※지역코드 참고※
0 : 지역에 상관없이 재생가능
1 : 미국을 포함한 북미 지역
2 : 일본 및 유럽
3 : 우리 나라를 포함한 동남아 지역
4 : 오스트레일리아, 뉴질랜드, 남아메리카
5 : 러시아, 아프리카
6 : 중국
8 : 국가간을 여행하는 비행기나 선박 내

7.DVDRip (정식릴)
정품DVD에서 동영상을 추출해 DivX코덱이나 XviD코덱을 이용해 인코딩하여 만든것.

[인코딩 용어]

가.영상 코덱
예)넥스트.Next.2007.DVDRip.DivX.AC3.CD2-BUGS.avi
   스파이더맨 3.Spider.Man.3.2007.DVDRip.XviD.AC3.CD1-FLAiTE.avi
   한니발 라이징.Hannibal.Rising.2007.R5.x264.AC3.5.1CH-TN.avi
   뮬란.Mulan.1998.DVDRip.WS.WMV9.AC3.2Audio.CD2-ACE.avi
① MPEG-4                                      
마이크로소프트에서 개발한 MPEG4 코덱.
② DivX (DIgital Video EXpress)
몇몇 해커들이 MicroSoft의 MPEG4 코덱을 해킹해서 만든 것입니다.
③ Xvid
DivX코덱이 최근들어 광고를 삽입하기 시작했는데, 이에 반발해서 나온 코덱.
그래서 이름도 DivX를 거꾸로한 XviD로 명명.
프리웨어이기 때문에 인기를 끌고 있습니다.
④ x264
H.264 코덱의 한 종류.
현재 계속 개발중이고 무료이기 때문에 가장 선호.
단점은,저사양컴에서 버벅임과 끊김이 발생하기도합니다.(1CD는 괜찮음)
화질은 최상!!
⑤ Wmv9 
WMV9이 가장 늦게 나온 코덱으로써 용량 대 화질비가 상당히 뛰어난 코덱입니다.
 
나.음성 코덱
예)카모메 식당.Kamome.Shokudo.2006.DVDRip.XviD.MP3.2CH-TLF.avi
    스파이더맨 3.Spider.Man.3.2007.DVDRip.XviD.AC3.CD1-FLAiTE.avi
    레지던트 이블2.Resident.Evil.Apocalypse.2004.SE.XviD.DTS.5.1CH.CD3-WAF.avi
① MP3                                                         
MPEG1에서 규정한 고음질 오디오 압축기술의 하나.
MP3의 경우 2CH(스테레오) 만 지원하고 5.1CH은 지원하지 않습니다.
② AC3
DVD는 일반적인 서라운드 사운드를 사용할 뿐만 아니라 5.1채널을 지원하는 AC3라는 포맷을 사용.
AC3는 사운드 데이터를 압축하기 위한 돌비사의 Audio Compression 3 포맷의 약자입니다.
이처럼 AC3 코덱의 사운드를 그대로 추출한 데이터는 5.1CH을 지원합니다.
③ DTS
Digital Theater System의 약자로 영화나 음악에 사용되는 다채널 서라운드 코딩 테크날러지의 명칭.
극장과 같은 웅장한 서라운드효과.
 
[DVD 특별판 용어]
예)레지던트 이블2.Resident.Evil.Apocalypse.2004.SE.XviD.DTS.5.1CH.CD3-WAF.avi [특별판]
    힐즈 아이즈 2.The.Hills.Have.Eyes.II.2007.UNRATED.XviD.AC3.CD2-BKL.smi [무등급판]
    수퍼맨 리턴즈.Superman.Returns.2006.LE.DVDRip.XviD.AC3.CD3-WAF.avi [한정판]
    나비효과.The.Butterfly.Effect.2004.DC.DVDRip.XviD.AC3.GRE-JJH.avi [감독판]

① SE (Special Edition :스페셜 에디션 = 특별판)
일반적으로 출시되는 타이틀에 비해 부가정보나 화질, 음향 등의 질을 높여 소장가치를 높인 타이틀.
② CE (Collector's Edition : 컬렉터스 에디션 = 소장판)
말 그대로 소장을 목적으로 한 타이틀을 뜻합니다.
SE와 큰 차이는 없지만 소장욕구를 증대시키기 위해 패키징 등에 좀 더 신경을 쓴 타이틀.
③ LE (Limited Edition : 리미티드 에디션 = 한정판)
한정 수량만을 출시하는 타이틀.
수량이 제한되어 있어 희소성이 높습니다.
일반판에 비해 패키징이 다른경우도 많으며 여러가지 특전영상물이 제공되는 경우가 많습니다.
④ UE (Ultimate Edition : 얼티밋 에디션 = 최종판)
스페셜피쳐는 물론, 화질과 음질 등을 최상급으로 제공해
더 이상 높은 퀄리티의 타이틀은 출시되지 않는다는 최종적 의미를 강조할 때 쓰입니다.
⑤ DC (Director's Cut : 감독판)
극장에서 상영된 필름과 다르게 감독의도대로 편집.
⑥ TE (Theatrical Edition : 극장판)
⑦ EXTENDED : 확장판
⑧ UNRATED : 무등급판
등급평가가 없는 영화.
⑨ UNCUT : 무삭제판

[그밖에 부가된 용어]
예)박물관이 살아 있다.Night.At.The.Museum.2006.PROPER.DVDRip.XViD-TKK.avi
    뮬란.Mulan.1998.DVDRip.WS.WMV9.AC3.2Audio.CD2-ACE.avi
    레드라인.Redline.2007.REPACK.DVDRip.XViD-XanaX.avi

WS : 와이드 스크린. 극장과 같은 화면비(폭이 넓다)
FS  :  풀 스크린.TV화면과 같은 화면비
Proper : 이전의 릴에 문제가 있어서 새로 릴한 것. (동영상 질이 향상됨)
Subbed : 자막이 영상에 포함.
Dubbed : 음성이 원어가 아닌 더빙이 된 경우.
Repack : 처음 배포한 동영상에 문제가 있어 다시 릴한 것.
(동영상이 너무 크거나 짤린 부분이 있어서 다시 릴한 경우)
iNTERNAL (iNT) : 첫 릴리즈 이후 6시간 이내에 2팀까지 해당하는 것.
2Audio: 소리채널이 2개 (1.언어선택기능-2개국이상 언어로 선택하여 들을수있음.)
                                    ( 2.대사외 해설-감독.배우들의 코멘터리가 나오는 경우가있음)
                                    
[릴리즈그룹명]
예)수퍼맨 리턴즈.Superman.Returns.2006.DVDRip.LE.XviD.AC3.CD3-WAF.avi
 파일명뒤에 영화를 릴한 개인이나 팀이름을 명시하여 릴리즈된 정보를 쉽게 알수있도록합니다.
WAF(소장용으로 선호)
BKL. MRG. CiMG. MoMo. JUPiT. iMC. HDK. Skye. LUXURY..
PONY. SaND. aXXo. 4RiLLa. eSH4Re.SAPHiRE. DiAMOND. PUKKA. JJxvid ...등

출처: http://blog.naver.com/kkawa22/140043079748

릴리즈 그룹 정보들...

유용하다고 판단되어 퍼온 자료입니다. 출처는 모릅니다.ㅜㅜ

WAF (We Are Family)
암흑의 루트에서 최고의 찬사를 받는 팀이다.
영상과 사운드 모두 DVD 수준의 고화질을 보여주며 800대 화면비를 선호한다.
고사양 PC용으로 릴하기 때문에 저사양에서는 관람이 힘들기도 하다.
특별판등의 소장용 릴그룹중 최고로 꼽을만 하다.
꾸준한 작업으로 상당한 영화를 보유하고 있으며
현존 최고 화질을 만드는 걸로 인식이 많이 되어있다.
하지만  이 그룹에서 릴리즈 하는 작품들은 기본꼴이 CD 2장에서 5장 사이이다.
즉 2GB~ 3.5GB 정도로 덩치가 큰 편이다. 음향은 AC3,DTS를 주로 쓴다.
(요새는 용량이 합쳐진 FULL파일이 많음)

JUPiT  
최근 많은 인기를 구사하고 있는 팀으로 720대 화면비를 선호하며 매우 우수한 화질을 보여준다.
상당히 빠른 출시를 하며 보통 일반판을 위주로 배포하며 소장용으로 각광을 받고 있다.

JJH
한장판 릴중에서는 가장 오랜 작업기간을 보여주고 있으며 한장판의 황제 라고도 한다.
모든 영화를 한장으로 출시하며 사운드도 AC3 사운드를 주로 사용하며 영상과 함께 높은 평가를 받고 있다.
요즘 주춤하여 많은 작업릴들이 보이진 않지만 팬들이 많은 릴이며 한장판의 소장용 으로 많이 사용된다.
(요새는 PONY릴이 대중적 인기있음)
 
CBK 
영상품질이 비교하기 힘들 정도로 WAF와 맞먹는다.
게다가 WAF에서 단점으로 지적돼온 컴퓨터 사양을 높게 타지 않는편이다.
이 그룹에서 작업하는 사람은 1명 뿐이라고 한다.
개인이 혼자 릴리즈 한다고 한다.
그래서 그런지 릴리즈 하는 자료가  많지 않은 편이다.(단점)
요새는 활동이 뜸함.

CiPA
화질 음질 모두 뛰어난 그룹이다.
슈렉2 를 릴리즈하여 유명해진 그룹이다.
비디오 코덱은 MPEG4를 사용하며 오디오 코덱은 AC3, DTS를 사용한다 (국내 릴리즈 팀이다-생긴지 얼마 안되었다)
WAF 팀에서 빠져나온 사람이 팀을 구성했다고 한다.(확인된건 없다)

JUNO
요즘 활동이 활발한 그룹, 영상품질 과 오디오 품질이 뛰어나다.
그러나 WAF, CBK, CiPA 보다 떨어지는 편이다.
허나 위 세그룹이 릴리즈하지 않은 영화나 애니가 많기때문에 그런 영화들은 이런 그룹들을 이용하여 받으면 된다.
주로 CD2 장으로 릴리즈 한다. 오디오는 AC3 , DTS 를 사용한다.

AXiNE
화질과 사운드는 보통수준이며 보통 일본자료에서 많이 보이는 팀이다.
알려지지 않은 작품들을 많이 릴 하고 있으며 그런 면에서 인기도는 상당히 좋은 편이다.
하지만 화질면에서 못미치는 점이 있어 아쉬움이 남는 팀이긴 하다.

DoNE
주로 개봉한지 얼마 안된 외국 영화들이나 디렉터즈컷 등 정말 좋은자료를 릴리즈하는 그룹이다.
애플사에 예고편보다가 찾아보면 이 그룹이 벌써 영화를 릴리즈 했었다.
미개봉이나 정말 따끈따끈한 자료를 이 그룹에서 얻으실 수 있다.
그래서 빨리 보도픈 이들에게 추천~! 화질이나 음질은 무난한 편이라고 하겠다.

PONY
한장판 릴이 주로 많으며 화질이 선명하고 사운드 또한 안정적이다.
최신영화를 빠르게 릴리즈하는편이라 인기가 있다.

SaND
최근 x264 코덱을 적극 사용하며 나타난 릴이다.
코덱의 장점을 적극 활용하며 화질 사운드 모두 최고의 영상을 보여준다.
하지만 이 코덱이 아직 대중화 되지 않은 것이라 컴 외에는 따로 감상하기가 힘들다는 단점이 있다.
대중적인 인기를 얻지 못하는게 아쉬운 릴이다.(X264코덱은 디빅플레이어에따라 안읽혀짐)

SKY 
립핑 실력이 우수하다고 많이 평가하며 그래픽 카드가 어느정도 받쳐줘야 감상하기 좋은 릴이다.
오랜 경험으로 인한 영상 및 사운드 모두 좋은 편이다. 취향에 따라 소장용으로 각광 받기도 한다.

ALLIENCE
이 그룹의 영어를 해석하면 동맹이다. 화질보단 음질에 중심을 두는 그룹같다. 
주로 릴리즈 하는 것은 디렉터즈컷이나 개봉작들이며 최근에 나비효과를 릴리즈한 그룹이다.
영화 나비효과때문에 좀 알려진 것 같다.

DEiTY
이 그룹 이름의 영어해석은 신이다. 개인적인 소감으론 영상은 중상 음향은 중하정도인것 같다.
밴드 오브 브라더스를 릴리즈한 그룹이다.
이 그룹은 CD 한장으로 릴리즈하기 때문에 동영상 받는 시간을 아낄 수 있다.

MTP
ACE팀의 다른 명칭이기도 하며 보통 WMV9 코덱을 주로 사용하기에
화면의 영상미는 좋으나 사운드가 약한게 흠이며
코덱의 특수성때문에 컴외에는 감상하기가 어려운게 흠이다.(Tvix, Modix 제품군)
소장용 영상을 릴리즈 하는 그룹중에 하나 이며, CD 수도 그리 많지않은 2~3장으로 릴리즈 한다.

Centropy
예전에 이름을 날렸던 캠 그룹 이었다.
 
Cartel
요즘에 뜨고있는 캠 릴리즈 그룹이다.
캠이지만 꽤나 선명한 화질(S-VCD 급)을 자랑하며 오디오 역시 DVD 소스에서나 추출이 가능한 AC3를 사용하는 팀이다.

PreVail 
캠 릴리즈 그룹

PUKKA
TS.TC.R5.SCR등 정식 DVD출시전 기타소스를 가지고 주로 릴리즈하며.
화질또한 캠버전보다 월등히 우수하고 음질또한 잡음이 없다.
최신 인기.흥행작들을 아주 빠른 스피드로 배포하여 인기가 좋다.
 
JOKE / OULP / RoCo
중간정도의 신진팀으로 무난한 영상과 사운드를 보여준다.
하지만 작업의 양이 그리 많은 편이 아니라 인기도에서는 많이 뒤쳐지는 모습이다.
개봉작이나 화제작등을 주로 다룬다.

MiNY / MoMo / ACE
중상급의 인기를 얻고 있는 팀으로 640대 화면비를 하며 화질 사운드 모두 우수한 팀으로 꼽힌다.
보통 두장판을 작업하나 한장판과 더불어 중간선에서 작업을 한다.

PosTX / CiMG / CaYEnnE
한국영화를 주로 다루는 팀이다.
상당히 빠른 배포로 거의 첫선을 보여주는 스피드를 자랑한다.
하지만 소장가치보다는 빠른 감상용으로 많이 사용되는 추세이다. 화질 사운드는 중급정도.

YUiZ / ManSal
한장판 중에서는 현 최고인기를 구사하는 릴이다.
팀이 아닌 개인릴이며 한장판에서 보기 힘든 사운드가 강화된 AC3판등을 선보이며
화질 또한 동급중에서는 가장 우수한 화질을 보여주고 있다.

TLF / ESPiSE
보통 무난한 감상을 할수 있는 릴로 소장보다는 감상용으로 많이 쓰이는 릴이다.
해외 영화를 주로 인코딩하며 개봉작이나 화제작보다 가려진 영화를 많이 작업하는 편.

AVA / WP / LAiN
애니메이션을 주로 내놓으면서 알려진 릴명이다.
애니메이션의 다양한 작품을 릴하면서 애니메이션 소장판으로 많이 사용되기도 한다.
영상 및 사운드는 중급수준.

DiAMOND
해외에서 유명한팀이다. 월드팀으로서 상당히 오랜역사를 가지고 있으며
주로 한장판을 선보이고 있으며 장르 구분없이 선보이는 편.
요즘은 많이 소개가 안된 탓인지 주춤하는 기세가 보이긴 하지만 이쪽 루트에서는 알아주는 팀인건 분명하다.

luxury / icedrama /aLive / COLOR / eSH4Re
다방면에 고루 활동하지만 TV쇼,드라마에서 두각을 나타내는 릴그룹이다.

BKL
요새 한창 뜨고있는 릴그룹.
최신작.인기작을 많이하며 2CD를 기본. 영상.음성 모두 뛰어나다.
상당히 빠른 출시를 자랑하며 많은 인기를 얻고있다.

2007년 12월 17일 월요일

PCSX 2 0.95 Rev 239에서 FFXII 구동 테스트

PCSX 2 0.95 Rev 239에서 FFXII를 구동해보았다.

PCSX 0.95 Rev 239가 나온지 얼마 않되여 구동을 시도해보았는데, 생각보다 프레임이 얼마 나오지 않아서 실망했다.

테스트 환경은 아래와 같다.
VAIO VGN FZ-26L
OS : Windows Vista Premium K
CPU : Core 2 Duo T7500
Graphic Card : 8400M GT

아래에 몇장의 스크린샷을 추가하겠다.

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

2007년 12월 14일 금요일

PSP 홈브류용 아이콘 및 배경이미지들

많이 사용이 되여지고 있는 홈브류용 아이콘 및 배경이미지들입니다.

간만에 PSP 관련 자료를 올리네요.

CPS 1 관련

사용자 삽입 이미지
사용자 삽입 이미지



CPS 2 관련

사용자 삽입 이미지
사용자 삽입 이미지

NeoGeo 관련

사용자 삽입 이미지
사용자 삽입 이미지

NES 관련

사용자 삽입 이미지
사용자 삽입 이미지

SNES 관련

사용자 삽입 이미지
사용자 삽입 이미지


GBA 관련

사용자 삽입 이미지
사용자 삽입 이미지

WSC 관련

사용자 삽입 이미지
사용자 삽입 이미지

Daedaius N64 관련

사용자 삽입 이미지
사용자 삽입 이미지

DGen 관련

사용자 삽입 이미지
사용자 삽입 이미지

EReader 관련

사용자 삽입 이미지
사용자 삽입 이미지

Filer 관련

사용자 삽입 이미지
사용자 삽입 이미지

iR Shell관련

사용자 삽입 이미지
사용자 삽입 이미지

JPEG Viewer 관련

사용자 삽입 이미지
사용자 삽입 이미지
















PCSX 2 0.9.5 SVC Rev 252 ICC Build 릴리즈!

PS2 최강 예뮬인 PCSX 2 Rev 252 ICC Build가 새롭게 릴리즈 되었습니다.

Intel C++ 컴파일러 및 Visual Studio 2008 를 이용하여 빌드를 했네요.

단 Run CD/DVD가 작동 않되시는 분은 Execute를 이용하여 구동을 시도해보실수가 있습니다.

사용자 삽입 이미지


출처 : http://www.pcsx2.net

PS2 예뮬 PCSX2 체험기

여유 시간에 PCSX2를 이용하여 몇몇 PS2 몇몇 게임을 구동해봤다.

몇년전까지만 해도 PC에서 PS2를 구동한다는건 환상에 꿈이였었다.
그런데 PCSX2 가 0.94까지 업그레드 되면서 많은 게임을 지원하게 된것이다.
현제 글을 쓰는 시점까지 안정화된 최신 버젼은 0.94이고 0.95 베타버젼이 몇개 정도 나왔다.

일단은 가장 최신인 0.95 베타 Rev 239버젼에서 여러가지 최신 플러그인을 사용하여 Kingdom Hearts II 를 구동해봤다.

전반적으로 CG를 제외한 곳에서 프레임수가 60정도 나왔다. 단 CG 플레이 할때는 평균 30정도 밖에 나오지 않는다.

사용자 삽입 이미지

시간 나는대로 다른 게임들 구동도 시도해보련다.

2007년 12월 3일 월요일

tr ( table row) 안에 있는 td의 갯수 추출 및 참조하기

TR 객체만 가지고도 그 속의 TD 객체를 구할수 있습니다.

매개 TD마다 아이디를 부여하여 TD 객체를 구해오는것 보다는 TR에만 ID를 부여하여 TR객체를 얻고 다시 그 TR에 속하여 있는 TD 객체를 얻어오는것이 더욱 간편하고 ID가 많음에 따른 혼잡성도 줄여줄수 있습니다.

가령 <TR id = "myTr"><TD>ABC</TD><TD>DEF</TD></TR> 이런 HTML 코드가 있을때 두번째 셀 값 - 즉 DEF만 출력하고 싶다면 어떻게 구현할가요?

아주 쉽습니다...

var trObj = $("myTr");

일단  prototype에 정의된 $()함수를 이용하여 tr 객체를 가져옵니다.

var tdObj = trObj.cells[1];

trObj 객체속의 모든 셀들중 두번째 셀 객체를 가져오는 소스입니다.

alert (tdObj.innerHTML); 이러면 직접 DEF가 출력이 되여집니다.

참고문서 : http://doersworld.tistory.com/category/JavaScript

2007년 11월 29일 목요일

Windows 환경에서 Apache 2.2.x + PHP 5.2.x 설치 및 설정하기

How to install Apache 2.2.x + PHP 5.2.x ???

래년 3월에 있게될 PHP프로젝트 땜에 Windows환경에 Apache 와 PHP 설치를 시도하게 되였습니다.

예전엔 Linux 환경에서 Apache 와 PHP 설치를 많이 해보았었는데, 윈도우 환경에서 해보니까 여러모로 새롭습니다.

설치 순서는 다음과 같습니다.
  1. Apache 서버 설치
  2. PHP 설치
  3. Apache  및 PHP 연동

아파치 서버는 소스가 아닌 바이너리 설치 파일로 다운로드 받습니다.
바이너리 설치 파일을 아파치 홈페이지에서 찾았는데 소스밖에 나와있지 않네요.
아래 미러링 사이트에 가시면 바이너리 파일을 다운로드 받으실 수 있습니다.
http://ftp.kaist.ac.kr/pub/Apache/httpd/binaries/win32/
파일명이 apache_2.2.6-win32-x86-no_ssl.msi 이렇게 표기된 파일을 다운로드 받습니다.

다운로드를 받으신후 직접 실행하셔서 설치를 시도합니다.

사용자 삽입 이미지


도메인 네임은 아래 스샷에서와 같이 설정하시면 됩니다. 메일주소는 당연 본인의 메일주소로 하셔야 겠죠?

사용자 삽입 이미지

다음을클릭하면 무난히 아파치 서버를 설치하실수 있습니다.
다음 주소로 접근하여 서버가 정상적으로 설치가 되였는지를 확인합니다.
http://localhost/

다음은 PHP를 설치하겠습니다.
http://www.php.net  에 접근하여 최신 PHP ZIP파일을 다운로드 받습니다.
저는 5.2.5 버젼을 다운로드 받았습니다.

다운로드 받으신  PHP ZIP파일을 적당한 위치에 압축을 풀어줍니다.
저는 D:\Dev Server\APM 이 경로에 압축을 풀고 폴더명을 PHP 5.2.5 으로 바꿨습니다.

PHP압축을 푸는것만으로 PHP 설치는 끝나고 남은 작업이라면 Apache 와 PHP를 연동 작업뿐입니다.

PHP 5.2.5 폴더로 가시면 php.ini-dist 라는 파일이 보일겁니다. 이 파일을 한부 복사하여 명칭을 php.ini로 바꾸어 줍니다.
만약 Windows폴더 밑으로 php.ini파일 복사를 하기를 원하지 않으시면
conf/httpd.conf파일 속에 아래 라인을 추가하시면 됩니다.

PHPIniDir "D:/Dev Server/APM/PHP 5.2.5/"

다음 php.ini파일은 C:\Windows 폴더 및에 복사하시고 php5ts.dll 및libmysql.dll 두 파일을 C:\Windows/System32 에 복사하여 넣습니다.

다음 Apache 설치된 폴더속으로 들어가 보시면 conf라는 폴더가 보일건데 그 속의 httpd.conf 파일을 메모장으로 여시고

#LoadModule ssl_module modules/mod_ssl.so

이 라인 아래에

LoadModule php5_module D:/Dev Server/APM/PHP 5.2.5/php5apache2_2.dll

이 한줄을 추가합니다.
실제 PHP가 설치된 경로에 마추어 작성해셔야 합니다.

또한

AddType application/x-gzip .gz .tgz

이 라인 아래에

AddType application/x-httpd-php .php

이 라인도 추가합니다.

이상 Apache, php 설치 및 설정이 끝납니다.

2007년 11월 22일 목요일

JavaScript의 객체지향

JavaScript는 단순한 스크립트이지만 객체지향을 지원하고 있습니다.

가령 ClassA와 ClassB가 존재하고 ClassB가 ClassA를 상속하고 있다면 실제 JS로 어떻게 구현할가요?
아래에 그럼 간단한 샘플 코드를 첨부하도록 하겠습니다.

<script>
function ClassA()
{
    this.a='a';
}
function ClassB()
{
    this.b='b';
}
ClassB.prototype=new ClassA();
var objB=new ClassB();
for(var p in objB)document.write(p+"<br>");
</script>

하지만 JS의 원형 상속구조는 Clone(복사) 상속구조가 아닌 Refer(참조)상속입니다.
이런 이유땜에 만약 ClassA인스턴스 맴버변수를 변경하면 ClassB 인스턴스도 변화를 가져오게 됩니다.

<script>
function ClassA()
{
    this.a='a';
}
function ClassB()
{
    this.b='b';
}
ClassB.prototype=new ClassA();
var objB=new ClassB();
alert(objB.a);
ClassB.prototype.a='changed!!';
alert(objB.a);
</script>

하지만 파생된 클래스에서 맴버변수에 대한 수정은 부모 클래스에는 영향을 주지 않으므로 실제 상속된것과 같은 형태로 표현이 되여집니다. 즉 쓰기 작업은 파생된 클래스에 한해서 진행이 되고 읽기는 부모 클래스( 자식 클래스에서 오버라이딩하지 않았을시)에 한해서 진행이 되여집니다.

또한 파생된 클래스 인스턴스가 하나가 아닌 두개가 존재한다면 두 인스턴스가 동일한 부모 클래스 맴버변수를 참조하게 되므로 실제 비교를 해보면 똑같은 결과가 나옴을 알수 있습니다.

<script>
function ClassA()
{
    this.a=function(){alert();};
}
function ClassB()
{
    this.b=function(){alert();};
}
ClassB.prototype=new ClassA();
var objB1=new ClassB();
var objB2=new ClassB();
alert(objB1.a==objB2.a);
alert(objB1.b==objB2.b);
</script>

아래에 첨부한 코드를 살펴보면 가장 치명적인 문제를 발견할 수 있는데, 보시다 싶이 ClassB의 인스턴스 objB1속의 맴버변수의 값만 변경하였을 뿐인데 objB2의 값까지도 변경이 되여져 있습니다.

<script>
function ClassA()
{
    this.a=[];
}
function ClassB()
{
    this.b=function(){alert();};
}
ClassB.prototype=new ClassA();
var objB1=new ClassB();
var objB2=new ClassB();
objB1.a.push(1,2,3);
alert(objB2.a);
// 모든 ClassB 인스턴스속의 a값이 모두 변화가 일어났다!!!
</script>

이러한 원인 때문에 위에서 설명드린 방식으로 상속을 구현하는것 보다는 prototype을 이용하여 상속을 구현하면 실제 저희가 원하는 결과를 얻을수 있습니다.

prototype상속은 파생된 클래스의 원형(原型)객체를 부모클래스의 한 인스턴스로 설정하여 상속을 구현하고 있습니다.

사용상 편이를 위하여 Function 객체의 한 메소드로 정의하여 사용합니다.

Function.prototype.Extends = function (parentClass)
{
  var Bs = new Function();
  Bs.prototype = parentClass.prototype;
  this.prototype = new Bs();
  this.prototype.Super = parentClass;
  this.prototype.constructor = this;
}

2007/11/17 - [분류 전체보기] - Prototype 1.5.0 API
2007/11/14 - [자바 어플리케이션/기타 프레임웍들] - JSValidate - Form Validation Library
2007/09/14 - [자바 어플리케이션/기타 프레임웍들] - Prototype 은 어떻게 DOM에 대한 확장을 하였는가?
2007/09/13 - [자바 어플리케이션/기타 프레임웍들] - prototype 1.5.1.1 Javascript 프레임웍 사용기 - 제1부
2007/02/26 - [자바 어플리케이션/기타 프레임웍들] - Prototype을 위한 퀵 가이드

2007년 11월 14일 수요일

JSValidate - Form Validation Library

JSValidate는 Prototype과 Script.aculo.us을 기반으로 한 심플한 라이버리이며 사용자들로 하여금 폼 유효성체크를 쉽게 할수 있도록 도와줍니다.

라이브러리는 http://www.jsvalidate.com/ 에서 다운로드 받으실수 있습니다.

실제 사용자는 특정된 CSS 클래스를 만들고 이에 관련되여 Form속의 필드에 Annotate를 추가하는것으로만 놀라운 Validation 효과를 만들수가 있습니다.

폼에 사용되여질수 있는 Annotate들은 다음과 같습니다.

  • jsrequired - 필드가 일렬의 값을 필요로 할때(필수입력사항).
  • jsvalidate_number - 모든 인티져 (정수 + 부수)
  • jsvalidate_digits - 오로지 숫자만 허용
  • jsvalidate_alpha - 오로지 알파벳만 허용
  • jsvalidate_alphanum - 알파벳, 숫자만 허용
  • jsvalidate_email - 유효한 메일 주소
  • jsvalidate_uscanzip - 미국과 캐나다의 우편번호만 허용
  • jsvalidate_usstate - 미국 주 이니셜
  • jsvalidate_usphone - 미국 전화번호
  • jsvalidate_creditcard - Validates VISA, MasterCard, American Express 을 허용
  • jsvalidate_ssn - 샘플 포맷으로 열거한 포맷만 허용 - XXXXXXXXX, XXX XX XXXX, or XXX-XX-XXXXX
  • select-notfirst - 콤보박스에서 첫 항목에 대한 선택을 허용않함
2007/11/13 - [분류 전체보기] - Javascript Utility Version 2
2007/02/26 - [자바 어플리케이션/기타 프레임웍들] - Prototype을 위한 퀵 가이드

2007년 11월 13일 화요일

구글, 안드로이드 현상금 1천만 딸러...

구글은 12일날 안드로이드 OS를 공개하였고, 어마어마한 금액으로써 공모전을 개최한다고 발표하였습니다.

한화 93억이 걸린 이번 공모전은 2008년 1월 2일부터 2008년 3월 3일 까지 진행됩니다.
공모전에 참가하는 방법은

1. 구글 안드로드이드 개발자 홈페이지에서 안드로이드 개발 전용툴을 다운로드 받습니다.
2. 개인 혹은 팀에서 여러가지 Idea를 내가지고 창의적인 애플리케이션들을 만듭니다.
3. 공모전 신청서를 제출합니다.

구글, 안드로이드 UI 공개

구글 안드로이드 SDK UI공개!

SDK에 포함된 안드로이드 OS 예뮬레이터 덕분에 구글의 차세대 모바일 폰 플랫폼을 둘러볼수가 있게 되였습니다.^^ 실제 공개된 UI를 보시면서 안드로이드 OS를 느껴보시죠.