사실 mp3player는 처음입니다-_-; 항상 핸드폰으로만 MP3를 들어왔기 때문에 이게 다른 제품에 비해서 편한지 안편한지는 잘 모르겠습니다. 하지만, 저는 편하네요^^

우선 메뉴에서 music을 선택하면 music폴더에 있는 음악을 다 재생할 수 있는 듯합니다. 왼쪽상단에 보면 목록같은 게 있는데, 그곳에서 재생목록을 편집할 수 있습니다.

그냥 재생목록, Music Favorites, Music Bookmarks 3가지가 있군요. 처음 재생목록에서 노래를 선택해서 재생하게 되면 music폴더에 있는 모든 곡을 재생하게 됩니다(여기서 반복설정하는 게 있는 폴더별 재생으로 바꾸면 해당 폴더만 반복이 되게 바꿀 수 있습니다)

Music Favorites는 자신이 원하는 목록을 만들어서 편집하는 건데, 1개밖에 없다니 충격이군요-_-; 제 핸드폰MP3는 LIST를 편집할 수 있는 게 몇 개 있었는데...핸드폰에 노래를 넣을 때 자신이 직접 편집해서 넣는 수 밖에 없겠군요.
재생목록에서 원하는 노래를 선택해서 +를 하면 Music Favorites에 넣을 수 있습니다(이것 또한 불편하군요-_-) 터치감도 조낸 느린데, 하나하나씩 하려니....-_-;

Music Bookmarks는 음악을 듣다가 원하는 위치에 북마크를 하는 것 같습니다(안써봤습니다-_-)

아래는 음악을 재생하게 되면 나오는 화면입니다.
사용자 삽입 이미지

별이군요. MP3파일에 커버정보가 있으면 보여줍니다.

가사 마킹이 안된 경우는 가수명, 제목, 앨범명이 나오는군요.
사용자 삽입 이미지

보드카레인이군요. 이건 노래방가사인데, 그냥 가사는 색칠하는 것이 안나옵니다.


아....저기 재생되는 화면에 손가락을 대고 왼쪽이나 오른쪽으로 드래그를 하면 이전곡, 다음곡으로 이동할 수 있습니다. 정말 신기하군요(촌놈같아-_-). QUICK LIST는 현재 LIST에서 어떤 노래가 있는지 쉽게 검색할 수 있고, 바로 재생이 가능합니다.
사용자 삽입 이미지

노래목록이 나오는데, 이것도 드래그를 하면 좌우로 옮길 수 있습니다^^ 원하는 노래 터치하면 재생이 바로됩니다^^

그 외에 메뉴에 기능이 있는데, 이퀄라이저, 반복설정, 북마크나 My Favorites추가 등이 있습니다.
사용자 삽입 이미지
딱 필요한 기능만 있어서 뭐 맘에 드네요. 음악 재생하는데에는 그리 불편하진 않는 것 같네요. 재생목록 편집하는거만 빼면-_-; 그리고, 가로모드에서 노래 드래그하면 화면이 부드럽게 이어지지 않네요. 조금 느린감이....

PS. 저는 블루투스 헤드셋이 있어서 해봤는데, 잘 되더라구요. HCS-100모델인데, 연결 후 바로 들으니 나오는군요. 대신 DMB는 안되는군요. DMB는 이어폰이 안테나 역할을 해서-_-; 어쨌든, 음악과 동영상은 잘 되네요^^ 예전에 핸드폰으로 듣던 음질보다 더 좋네요. 전 블루투스 헤드셋이 원래 음질이 안좋은 줄 알았는데, 핸드폰이 꼬진거였어요 ㅠ

 
Posted by 머드초보
,
 
셋팅이 끝났으니 Hibernate Mapping파일을 생성합니다.
New -> Other -> Hibernate -> Hibernate Mapping Files and POJOs from Database선택 -> File Name은 디폴트 ->
Avaliable Tables에서 sosi테이블 add -> JDK 5 Language Features체크, package는 sm.sosi.sosiage.map입력 후 Finish. 여기서 이상한게 매핑파일을 만들었는데, 패키지가 보이지 않습니다. 처음부터 생성되지 않은 패키지를 선택해서 그런 것 같은데, 넷빈즈 껐다 키면 보입니다-_-;(버그인 듯-_-)

이제 Dao를 하나 만들어봅시다.
sm.sosi.sosiage.dao패키지에 AgeDao클래스를 만들어봅시다. 이 클래스에 메소드는 나이를 알려주는 메소드 1개-_-; 이 클래스는 HibernateDaoSupport를 상속받습니다.
AgeDao.java
[code]public class AgeDao extends HibernateDaoSupport {
    public int searchAge(String name) {
        List<Sosi> sosi = getHibernateTemplate().find("from Sosi where name = ?", name);
        if (sosi.size() > 0) {
            return sosi.get(0).getAge();
        } else {
            return 0;
        }
    }
}[/code]
코드는 간단합니다. 제가 아직 하이버네이트를 공부중이라 저거 하나만 객체로 받아오는 걸 못하겠는데요-_-; List로 받아와서 그냥 첫번째꺼 가져오도록 했습니다-_-;

sm.sosi.sosiage.service패키지에 AgeService를 만들어봅시다.
AgeService.java
[code]public class AgeService {
    private AgeDao ageDao;

    public void setAgeDao(AgeDao ageDao) {
        this.ageDao = ageDao;
    }

    public String searchAge(String name) {
        int age = ageDao.searchAge(name);
        String message;

        if (age == 0) {
            message = name + "은/는 소녀시대의 멤버가 아닙니다.";
        } else {
            message = name + "의 나이는 " + age + "세입니다.";
        }
        return message;
    }
}[/code]
간단하게 메세지를 만들어서 리턴해주는 서비스입니다.

심플컨트롤러를 생성해봅시다. New -> Other -> Srpingframework -> Simple Form Controller선택 -> Class Name은 AgeController, package는 sm.sosi.sosiage.controller -> Finish.
AgeController.java
[code]public class AgeController extends SimpleFormController {

    private AgeService ageService;

    public void setAgeService(AgeService ageService) {
        this.ageService = ageService;
    }

    public AgeController() {
        setCommandClass(Sosi.class);
        setCommandName("sosiAge");
        setSuccessView("successView");
        setFormView("formView");
    }

    /*
    @Override
    protected void doSubmitAction(Object command) throws Exception {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    */

    //Use onSubmit instead of doSubmitAction
    //when you need access to the Request, Response, or BindException objects
    @Override
    protected ModelAndView onSubmit(
            HttpServletRequest request,
            HttpServletResponse response,
            Object command,
            BindException errors) throws Exception {
        Sosi sosi = (Sosi)command;
        ModelAndView mv = new ModelAndView(getSuccessView());
        mv.addObject("message", ageService.searchAge(sosi.getName()));
        return mv;
    }
}[/code]
이제 formView와 successView만 작성하면 끝이네요.
Web Pages -> WEB-INF ->jsp에서 New -> JSP -> JSP File Name은 formView -> Finish.
formView.jsp
[code]<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>소녀시대 짱-_-;</title>
    </head>
    <body>
        <form:form commandName="sosiAge" method="post" action="age.htm">
            소녀시대 멤버이름을 입력하세요:
            <form:input path="name" />
            <input type="submit" value="검색">
        </form:form>
    </body>
</html>[/code]
또다른 View파일 JSP File Name은 successView -> Finish.
successView.jsp
[code]<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>소녀시대 나이 결과</title>
    </head>
    <body>
         <h2>${message}</h2>
    </body>
</html>[/code]
이제 dispatcher-servlet.xml에 bean을 등록해봅시다.
dispatcher-servlet.xml
[code]<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
                <prop key="age.htm">ageiController</prop>
            </props>
        </property>
    </bean>
   
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <!-- dao -->
    <bean name="ageDao"
          class="sm.sosi.sosiage.dao.AgeDao"
          p:sessionFactory-ref="sessionFactory" />

    <!-- service -->
    <bean name="ageService"
          class="sm.sosi.sosiage.service.AgeService"
          p:ageDao-ref="ageDao"/>

    <!-- controller -->
    <bean name="indexController"
          class="org.springframework.web.servlet.mvc.ParameterizableViewController"
          p:viewName="index" />
    <bean name="ageController"
          class="sm.sosi.sosiage.controller.AgeController"
          p:ageService-ref="ageService" />[/code]
실행해보면
정보: Hibernate: select sosi0_.idx as idx0_, sosi0_.name as name0_, sosi0_.age as age0_ from hibernate.sosi sosi0_ where sosi0_.name=?
이런 쿼리가 날아가네요.
사용자 삽입 이미지
사용자 삽입 이미지
태연 짱-_-; 역시 원더걸스 예제보다 소녀시대 예제가 더 접근성이 높은 듯-_-;

PS. 보니까 Hibernate도 애노테이션으로 할 수 있는 듯 한데, 그것도 좀 해봐야겠네요. 다시 하이버네이트 책을 좀 읽어봐야겠어요-_-;
 
Posted by 머드초보
,
 
요즘 하이버네이트3 프로그래밍(최범균 저)를 보고 있는데, 뭔소린지 잘 이해가 안가서 쉬어갈 겸-_-; 넷빈즈에서 스프링이랑 하이버네이트 연동하는 거 정리해서 올립니다-_-;

환경 : GlassFishV3 + SpringFramework 2.5 + Hibernate 3.2.5 + MySQL5.0 + Netbeans6.5

접근성을 높이기 위해(?) 소녀시대를 예제로 작성해봅시다. 멤버이름을 입력하면 멤버의 나이를 알려주는 웹애플리케이션을 만들어봅시다-_-;

Database
[code]CREATE TABLE `sosi` (
  `idx` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `age` int(10) unsigned NOT NULL,
  PRIMARY KEY (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `sosi` (`idx`,`name`,`age`) VALUES
 (1,'윤아',20),
 (2,'수영',20),
 (3,'효연',21),
 (4,'유리',21),
 (5,'태연',21),
 (6,'제시카',21),
 (7,'티파니',21),
 (8,'써니',21),
 (9,'서현',19);
[/code]

New Project -> Java Web -> Web Application -> Project Name : SosiAge -> Glass Fish V3으로 하구요 -> Spring Web MVC 2.5랑 Hibernate 3.2.5체크합니다.
Hibernate에서 DB를 설정해야하는데, New Database Connection해서 Name을 MySQL로 맞추고, 설정에 맞게 입력한 뒤, 추가한 것으로 선택한 뒤 Finish를 누른 뒤 완료합니다.

한글문제로 인한 web.xml파일에 아래 코드를 추가합니다.
web.xml
[code]<filter>
          <filter-name>Request Encoding</filter-name>
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
          <init-param>
               <param-name>encoding</param-name>
               <param-value>UTF-8</param-value>
          </init-param>
     </filter>
     <filter-mapping>
          <filter-name>Request Encoding</filter-name>
          <servlet-name>dispatcher</servlet-name>
     </filter-mapping>[/code]
hibernate를 사용하기 위한 필수작업인 session bean을 생성해야합니다.
applicationContext.xml
[code]<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </bean>[/code]
설정을 여기에 다 적고, datasource를 session에 di를 해도 상관없고, hibernate.cfg.xml파일에 설정해도 다 되더군요. 우선 기본적으로 hibernate.cfg.xml파일을 직접 만들어주니 configLocation설정해서 해봅시다.

하이버네이트 설정파일에서 SQL문을 직접볼 수 있는 옵션을 추가합시다.
Source Packages -> default package -> hibernate.cfg.xml파일을 열어봅니다.
design모드에서 Configuration Properties에서 add한 뒤, hibernate.show_sql값 true로 추가합니다. 쿼리를 직접보도록...-_-;

이제 뭐 셋팅이 끝났네요. 셋팅 끝나면 뭐 그냥 쓰기만 하면 됩니다-_-;
다음 장에서......
 
Posted by 머드초보
,
 
상을 완전히 휩쓸었다고 해서 봤습니다. 우선 제목에서 Slumdog이라는 단어는 없더군요-_-; 은어인가...slum은 빈민가라는 뜻이고 dog는 개니까...뭐 그리 좋은 단어는 아닌 듯 합니다. millionaire는 백만장자라는 뜻이군요.
네이버에서 장르가 멜로/애정/로맨스, 코미디, 드라마라고 되있네요. 그래서 저는 뭐 단순한 미국식 코미디 멜로라고 생각했습니다. 하지만, 제 예상이 빗나갔네요-_-; 전혀 정보도 없이 본거라... 보니까 미국영화도 아닌 것 같네요. 제작은 영국에서 하고, 인도배우를 쓴 경우인 듯 합니다.

줄거리
빈민가 출신의 18살 고아 자말은 거액의 상금이 걸려있는 ‘누가 백만장자가 되고 싶은가’라는 최고 인기 퀴즈쇼에 참가한다. 처음 모두에게 무시당하던 자말은 예상을 깨고 최종 라운드에 오르게 되고, 정규 교육도 제대로 받지 못한 그의 부정행위를 의심한 경찰은 자말을 사기죄로 체포한다. 하지만, 결국 자말이 살아온 모든 순간이 정답을 맞출 수 있는 실마리였다는 것과, 그가 퀴즈쇼에 출연한 진짜 목적이 밝혀지게 되는데…
-네이버 영화검색-

이 영화를 보면서 느낀점은 인도를 잘 모르는 사람이 봤을 경우 인도는 정말 못살고, 그지같은 나라구나 라는 생각이 먼저 들 것 같습니다. 영화가 인도를 깔려고 만든 것 같습니다-_-; 주인공이 타지마할에 대한 가이드를 할 때에 약간의 코미디장르가 나와 웃겼던 기억이 나는군요^^

이 영화가 상을 휩쓴 이유는 퀴즈를 통해 어느 한 청년의 삶을 보여주는 과정을 너무 완벽하게 표현해서가 아닐까합니다. 그 청년이 과거 살아온 장면 하나하나를 보여주면서 퀴즈와 연결합니다. 음악쪽으로 상을 다 휩쓸었는데, 음악에 대해서는 제가 잘 몰라서 뭐라 말 못하겠네요. 음악은 주로 인도풍의 음악이 나오던데-_-; 예전에 그 누구죠. 뚫훍뚫훍 했던 그 사람은 인도하면 생각나요^^

뭐 전 내용도 재미 있었고, 내용 구성도 꽤 괜찮았던 것 같네요.
시작하자마자 영화에서 문제를 냅니다.

Jamal Malik is one question away from winning 20 million rupees. How did he do it?
자말 말릭은 퀴즈쇼에서 상금 2000만루피까지 마지막 한문제를 남기게 되었다. 어떻게 그는 그것을 했을까?
A: He cheated(속임수를 써서)
B: He's lucky(운이 좋아서)
C: He's a genius(영리해서)
D: It is written(쓰여진 것이어서-_-)
음....저는 이것의 답이 왠지 D라는 생각이 자꾸들었습니다-_-; 근데 영화를 보면서 이 감독이 던지는 떡밥에 대해서 정말 대단하다는 생각이 듭니다-_-; 점점 다른 답을 생각하게 만듭니다^^
어쨌든, 더 이상하면 스포일러(이미 스포를...-_-)일 듯-_-

마지막에 발리우드에서 꼭 나온다는 그 댄스도 나오네요. 발리우드도 이번에 처음알았네요^^


사용자 삽입 이미지

 
Posted by 머드초보
,
 
사실 어떤 블로그를 보고 구글에서 세미나 한다고 해서 가보고 싶어서 신청했는데, 되서 가게 되었는데....난....App Engine이 뭔지도 모르고....OpenSocial은 또 뭐고.....-_-; 아무것도 모르는 상태에 가서 세미나를 들었습니다. 역시나......뭔소린지 하나도 모르고 그냥 돌아왔습니다 ㅠ

우선 처음에 가니....구글코리아가 여기 강남에 있었군요-_-; 참 색다른 경험이였습니다-_-; 알록달록한 것이 참 이쁘네요. 암튼, 시간이 좀 늦어져서 좀 늦게 20분 후에 시작했던 것 같네요.

Making Money with OpenSocial

간단하게 오픈소셜로 수익을 얻을 수 있는 것을 발표했습니다. 그 첫번째로 광고구요. 광고는 인터넷에서 필수적인 수익모델이죠^^ Buddy Poke라는 것이 가장 유명한 것 같은데, 지금 방금 실행해보니....대체 뭐하는 건지 모르겠습니다-_-; 전 친구가 하나도 없어서 그런가요?-_-; 그냥 어떤 놈이 나와서 저한테 손만 흔드는군요-_-; 왠지 플렉스로 만든 것 같습니다. 플렉스 컴포넌트들이 막 보이네요.
http://www.buddypoke.com/

두번째로는 Virtual Currency네요. 이건 국내에서 게임 업체나 커뮤니티업체들이 많이 하는 모델이죠. 아바타 사려면 돈을 결제해야하는 그런...cyworld에 도토리 보내 달라고 하는 복혜은이 생각나네요(친구입니다-_-).

세번째는 offers인데요. 어떤 요구사항을 들어주고, 돈이나 Point를 받는거죠. 이것도 국내에서 많이 하는..-_-; OK CashBag모을 때나 던전앤파이터를 하는데, 캐쉬가 모자라서 창고를 못살 때 쓰는 좋은 방법이죠-_-; 아래는 Mobsters라는 건데, 게임인 듯 한데, 뭔가 복잡하군요. 이곳에서 쓰이는 돈을 받기위해서 어딘가 회원가입을 해서 Cash를 모아야하나 봅니다-_-;
http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=104283

네번째는 Brand Marketing이라고 하는데, 뭘 말하는건지 모르겠네요.

위에 사례를 들어보니...오픈소셜 애플리케이션을 만들고 싶군요. 마이스페이스같은 SNS서비스에 APP를 만드는 것인 것 같습니다. 한번 알아봐야하겠습니다(뒷조사를..-_-)


Google App Engine

아....외국인입니다...뭔말하는지 못알아 듣겠군요. 다행히 통역해주시는 분이 계셨습니다만, 몇마디는 생까고 해주신 것오늘 가장 큰 깨달음은 영어공부를 해야한다였습니다-_-; 영어공부를 해야합니다...ㅠ
오늘 대충 얘기를 들어보니 App Engine은 구글에서 서버사이드환경을 제공하며 구글이 제공하는 Framework를 이용해서 손쉽게 웹애플리케이션을 구축할 수 있는 것 같습니다. 즉, 웹애플리케이션을 구동시키기 위한 서버 환경셋팅과정은 생까고, 구글에서 제공하는 서버환경 및 Database를 사용할 수 있는 것입니다. 뭐 단점이라면 지원언어가 Python밖에 없는 합니다. 아직 사용해보지는 않았지만, 이걸 사용한다면 서버 비용 절감 및 개발 시간 단축정도가 되겠네요. 게다가 구글인증을 사용해서 구글서비스와 손쉽게 연동이 되는 듯 하네요.

우선 처음에 얘기해준게 역시나 이거였습니다. 웹 애플리케이션 개발 시 문제점! 서버셋팅이죠. 서버머신도 있어야하고, 그곳에 여러 제품(Linux, Database 등)의 셋팅 등의 어려움이 있는데, App Engine에서는 이 모든 것을 하나에 담아서 제공합니다(아놔.....오늘부터 파이썬 파야하나....-_-)

또한 장점으로 쉽게 시작할 수 있고(파이썬 아닌사람이나-_-), 쉽게 변경이 가능하다고 하네요. 또한 구글과 같은 Infra를 사용해서인지 구글규모의 대규모 서비스도 가능하다고 하네요. 아...BigTable설명하면서 Database관련된 것을 보여줬는데, GQL(당연히 Google Query Language겠지-_-)라는 것을 이용해서 쿼리를 날립니다. SQL과 비슷한 문법으로....마치 HQL과 같은 형태로 App Engine에 맞게 최적화시킨 듯 합니다.

데모를 보여줬는데, 간단한 Hello World찍는 건데, 있다가 한번해봐야겠습니다. 설정할 수 있는 파일인 yaml(야믈이라고 읽더군요-_-)을 이용해서 뭐 하는 것 같은데...암튼, 방명록같은 것도 손쉽게 만들 수 있는 것 같습니다. 게다가 셋팅이 필요없는 개발환경을 제공하는 점이 너무 좋은 것 같네요. Java로 방명록 만드려면, 톰캣깔고, MySQL깔고, 뭐 그래야하는데, 이건 뭐 그런게 필요없는 듯 합니다. 좋아요~


App Engine + OpenSocial

뭐 두개를 이용해서 애플리케이션을 만들 수 있는 것 같은데, 둘 다 전혀 모르는 거라...그냥 멍하니 보다가 왔습니다.

아....보니까 OpenSocial애플리케이션 만드는 법이 Google에 Gadget(외국인들은 개짓이라고 발음합니다. 개짓하고있네-_-)만드는 거랑 같은 코드인 것 같네요. Module들어가고...전에 다음위젯뱅크 좀 보다가 본 건데, Javascript로 개발하는 듯 합니다. 지금 0.8버전까지 나왔는데, 지금은 기존처럼 Javascript형태로 개발이 가능한데, 나중에 템플릿기반의 개발이 가능한 듯 합니다. HTML태그를 입력하는 형태로 개발을 할 수 있는 듯 합니다. 마치 Flex에서 xml로 코딩할 수 있는 것 처럼이랑 비슷한 것 같습니다. 차후버전인 0.9에서 지원한다고 하네요.

아무것도 모르는 상태에서 글을 쓰려니 저도 뭔소리 한지도 모르겠네요. 그냥 들은 거랑 제 생각을 좀 포함해서 쓴겁니다. 잘못된 내용이 있을 수도 있습니다. 돌은 던지지 마시구요-_-;
사용자 삽입 이미지

제가 좋아하는 공책과 펜이군요. 공책과 펜을 너무 좋아합니다ㅠㅠ


 
Posted by 머드초보
,