안드로이드는 개발환경 구축이 좀 빡세네요.
Java는 원래 다 그런 것인가....-_- 자바는 셋팅이 반이라는 말이 있는데, 이놈은 셋팅도 다시 해야하고, 사실 언어만 java지 안드로이드에 맞는 class와 구조를 다시 배워야하는 거라 자바를 좀 안다는 사람이나 자바를 전혀 모르는 사람이나 뭐 차이가 없습니다.

그리고, AVD(Android Vritual Device)라고 해서 가상 에뮬레이터에서 실행할 수 있고, 모토로이에서도 실행할 수 있는데, 일단 가상에뮬레이터는 좀 느립니다. EditText부분에 글을 쓸 때 반응속도가 너무 느려서 짜증이 밀려내려옵니다.
그래서 개발할 때에는 모토로이에서 하고, 테스트할 때에는 에뮬레이터에서 하는 게 정신 건강에 좀 좋을 듯 합니다. 모토로이에서 개발하고 다른 해상도가 틀린 디바이스 때문에 에뮬레이터에서 테스트해줘야겠죠^^
사실 모토로이에서 디버깅하고 개발하는 게 의외로 편하고 잘 되어있습니다. 정말 신기했습니다^^

일단 셋팅에 대한 많은 글들이 있는데요.
http://john.tobe30.com/tc/292
http://blog.naver.com/ksewookk/100099954283
http://ihoney.pe.kr/entry/01-Android-%EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C-%EC%8B%A4%ED%96%89

여기 글들을 참조해서 셋팅을 하세요~
아....모토로이는 버전이 2.0.1이 탑재되어있습니다. 참고하세요~

그럼 프로젝트를 만들고 디버깅을 해봅시다.

1. 프로젝트 생성
Android Project -> Project name에는 TestDebug, Build Target은 2.0.1, Application name은 디버깅테스트, package name은 com.mudchobo.testdebug, Create Activity는 TestDebug 후 Finish.

EditText에 이름을 쓰고, Button을 누르면 Hello, 이름 이라는 어플을 만들겁니다.
main.xml파일 수정
[code]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
<EditText
    android:hint="이름입력하세요"
    android:id="@+id/etHello"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textShortMessage"
/>
   
<Button
    android:text="sayHello"
    android:id="@+id/btnHello"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>
<TextView 
    android:id="@+id/tvHello"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
/>
</LinearLayout>
[/code]
AndroidManifest.xml파일을 선택하고, Application탭을 선택하게 되면 Application Attributes에 Debuggable옵션이 있는데 이걸 true로 줘야합니다.

그럼 src -> com.mudchobo.testdebug패키지에 있는 TestDebug.java파일을 수정해봅시다.
[code]package com.mudchobo.testdebug;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class TestDebug extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        // 버튼에 이벤트 추가
        Button btnHello = (Button) findViewById(R.id.btnHello);
       
        // 버튼클릭 시 리스너추가
        btnHello.setOnClickListener(new View.OnClickListener() {
           
            @Override
            public void onClick(View v) {
                // edittext값 가져오기
                EditText etHello = (EditText) findViewById(R.id.etHello);
                String sayHello = etHello.getText().toString();
               
                // 값을 textview에 셋팅
                TextView tvHello = (TextView) findViewById(R.id.tvHello);
                tvHello.setText(sayHello + ", Hello!");
            }
        });
       
    }
}[/code]
그냥 버튼에 이벤트 추가하고, 버튼클릭 시 값가져와서 값을 셋팅하는 초간단 예제입니다.

2. 디버깅 포인트 잡기
EditText etHello~~ 부분에 Ctrl + Shift + B를 누르거나 맨 앞에 더블클릭해서 Break Point를 잡습니다.
그리고 TestDebug에 오른쪽버튼 누르고, Debug As -> Android Application을 선택하면 실행합니다.
AVD가 떠 있다면 떠 있는 곳으로 어플을 설치하며 실행하고, 없으면 직접 AVD를 실행해서 설치하여 실행합니다.
AVD를 미리 띄워놓고 하는 게 정신건강에 좋습니다. 안그러면 프로그램에 끝나는 순간 AVD도 같이 죽어버립니다-_- 나중에 다시 시작하려고 하면 또 AVD를 부팅하는 꼴이 되어버립니다-_-

암튼, 실행하고 EditText에 말을 입력하고 버튼을 누르면 breakpoint에서 멈출겁니다. 이제 디버깅 하면 됩니다.

3. 모토로이에서 디버깅
이제 모토로이에서 실행해봅시다.

일단 모토로이를 디버깅 가능하게 셋팅해야 합니다.
설정 -> 응용프로그램 -> 개발 -> USB 디버깅 체크하셔서 활성화 시켜주세요.

모토로이를 usb에 연결합니다.
그리고 위와 같이 디버깅을 시작합니다. 그러면 이창이 뜰꺼에요.
사용자 삽입 이미지
이미 띄워놓은 AVD로 실행할래? 모토로이로 실행할래 물어보는 것인 듯. AVD를 띄워놓지 않으면 뜨지 않습니다. 바로 모토로이로 디버깅을 하더군요.
사용자 삽입 이미지
와....디버깅이 잘되네요. 에뮬레이터에서 타이핑 테스트하다 야마돌지 마시고, 모토로이에서 디버깅을 하시길-_-

4. 테스트하고 남은 어플 지우기
그리고 테스트하고 남은 어플은 여기서 지우시면 됩니다.
설정 -> 응용프로그램 -> 응용프로그램 관리 -> 디버그테스트(아까 프로젝트 만들 때 Application Name을 찾으면 됩니다. abcd가나다 순이니 참고하시길^^)선택 후 제거하면 됩니다.

PS. 뭐 별것도 없는 글을 장문으로 써버렸네-_-
 
Posted by 머드초보
,
 
테스트의 중요성은 저번 스프링 강의시간에 충분히 느꼈습니다. 하지만, 역시 귀차니즘 때문에 잘 안만들게 되는 게 테스트인 듯 합니다. 하지만, 한번 만들어놓으면 이래저래 매우 유용한 것이 테스트죠.

다운로드는 여기서....-_-


Java에서는 Junit이라는 것이 있는데, 4버전에서는 Annotation(@)을 이용해서 쉽게 테스트를 만들곤 했는데요. Flex에서도 비슷한 기법을 이용합니다. 메타데이터를 위에다가 붙여서-_- 손쉽게 테스트를 만들 수 있습니다.
[code][Test]
public function testMyTest():void
{
}[/code]
와....Flash Builder를 보면 Java를 많이 따라한 것을 볼 수 있습니다. 예전엔 폴더생성으로만 만들 수 있었던 패키지가 직접적인 패키지 생성메뉴를 만들어서 Package Explorer에서 패키지형태로 볼 수 있습니다.
암튼, 자바와 닮아가는 듯-_-

1. 간단한 프로젝트 생성
Flex Project하나 생성.

2. 서비스 클래스 생성
덧셈 뺄셈 클래스하나 작성
com.mudchobo.test패키지의 Calc클래스 생성
Calc.as
[code]package com.mudchobo.test
{
    public class Calc
    {
        public function Calc()
        {
        }
       
        public function addition(a:Number, b:Number):Number
        {
            return a + b;
        }
       
        public function subtraction(a:Number, b:Number):Number
        {
            return a - b;   
        }
    }
}[/code]

3. 테스트 생성
New -> Test Case Class -> New FlexUnit 4 test선택. Name은 CalcTest로하고 Finish.
CalcTest.as
[code]package flexUnitTests
{
    import com.mudchobo.test.Calc;
   
    import flexunit.framework.Assert;

    public class CalcTest
    {
        private var calc:Calc;
       
        public function CalcTest()
        {
        }
       
        [Before]
        public function before():void
        {
            calc = new Calc();   
        }
       
        [Test]
        public function testAddition():void
        {
            var result:Number = calc.addition(50, 50);
            Assert.assertEquals(result, 100);
        }
       
        [Test]
        public function testSubtraction():void
        {
            var result:Number = calc.subtraction(50, 50);
            Assert.assertEquals(result, 0);
        }
    }
}[/code]
여기까지 작성하면 FlexUnitCompiler.mxml이라는 파일이 자동으로 생겼을겁니다. 이건 건드리지 않습니다. 검색해보니 이전방식으로 core생성해서 UIListener를 넣어서 하려고했는데, 이거 그렇게 하는게 아니더군요-_-
심지어 UIListener클래스는 없습니다-_-

4. 테스트 실행
테스트 실행은 package explorer에서 테스트클래스의 오른쪽 마우스버튼을 누르면 "Execute FlexUnit Tests"라는 메뉴가 있습니다. 그걸 선택하면 테스트가 됩니다. FlexUnitApplication.mxml파일도 같이 생기는군요.
테스트단축키는 Alt + Shift + E, F입니다....-_- 해당 편집파일에서 누르면 됩니다.
사용자 삽입 이미지
테스트 결과는 Junit처럼 이렇게 보여줍니다.
사용자 삽입 이미지
Junit이랑 똑같네.

5. 테스트 Suite 생성
이건 테스트를 다 모아서 실행하는 건데, 통합테스트를 할 때 사용하는 듯-_-
New -> Test Suite Class -> New FlesxxUnit4 test 하면 include할 테스트를 패키지에서 선택할 수 있습니다. 선택 후 Finish.
SuiteTest.as
[code]package flexUnitTests
{
    import flexUnitTests.CalcSecondTest;
    import flexUnitTests.CalcTest;
   
    [Suite]
    [RunWith("org.flexunit.runners.Suite")]
    public class SuiteTest
    {
       
        public var test1:flexUnitTests.CalcSecondTest;
        public var test2:flexUnitTests.CalcTest;
    }
}[/code]
그냥 저렇게 선언해두고, 오른쪽버튼 눌러서 "Execute FlexUnit Tests" or 알트 + 쉬프트 + E, F하면 통합테스트를 합니다.

6. 그외의 기능
저도 더 써봐야 알 것 같은데, Flex는 이벤트기반이다보니 Async와 UI구조가 많은데요. Async구조도 손쉽게 테스트를 할 수 있습니다.
[code][Test(async,ui)][/code]
이런식으로 하면 될 듯 한데, 안해봐서 잘 모르겠네요-_-

참고자료
http://www.insideria.com/2009/05/flashbuilder4-will-support-fle.html
http://balajisridhar.wordpress.com/2009/10/05/flexunit-integration-in-flash-builders-new-awatar-in-beta2/
 
Posted by 머드초보
,
 
셋팅이 완료되었으니 이제 controller를 만들어봅시다.
src폴더에 openidtest.controller라는 package를 만듭시다.
그리고, OpenIDController클래스를 생성합니다.
OpendIDController.java
[code]
package openidtest.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.openid4java.OpenIDException;
import org.openid4java.consumer.ConsumerManager;
import org.openid4java.consumer.VerificationResult;
import org.openid4java.discovery.DiscoveryInformation;
import org.openid4java.discovery.Identifier;
import org.openid4java.message.AuthRequest;
import org.openid4java.message.ParameterList;
import org.openid4java.server.RealmVerifier;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

public class OpenIDController
{
private ConsumerManager manager;
   
    @RequestMapping(value="/index.do", method=RequestMethod.GET)
    public String indexGetcontroller(ModelMap model)
    {
        return "index";
    }
   
    @SuppressWarnings("unchecked")
    @RequestMapping(value="/index.do", method=RequestMethod.POST)
    public String indexPostController(String openId, ModelMap model,
            HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {
        try
        {
            manager = new ConsumerManager();
           
            String returnToUrl = "http://localhost:8080/OpenIdTest/verify.do";
           
            List discoveries = manager.discover(openId);
            if (discoveries.size() == 0)
            {
                model.addAttribute("noopenid", openId);
                return "index";
            }
            DiscoveryInformation discovered = manager.associate(discoveries);
            request.getSession().setAttribute("openid-disc", discovered);
            RealmVerifier rv = new RealmVerifier();
            rv.setEnforceRpId(false);
            manager.setRealmVerifier(rv);
            AuthRequest authReq = manager.authenticate(discovered, returnToUrl);
           
            if (!discovered.isVersion2())
            {
                // Option 1: GET HTTP-redirect to the OpenID Provider endpoint
                // The only method supported in OpenID 1.x
                // redirect-URL usually limited ~2048 bytes
                response.sendRedirect(authReq.getDestinationUrl(true));
                return null;
            } else {
                // Option 2: HTML FORM Redirection (Allows payloads >2048 bytes)

                // RequestDispatcher dispatcher =
                // getServletContext().getRequestDispatcher("formredirection.jsp");
                // httpReq.setAttribute("prameterMap",
                // response.getParameterMap());
                // httpReq.setAttribute("destinationUrl",
                // response.getDestinationUrl(false));
                // dispatcher.forward(request, response);
            }
           
        }
        catch (OpenIDException e)
        {
        }
        return null;
        //model.addAttribute("openId", openId);
        //return "index";
    }
   
    @RequestMapping(value="/verify.do", method=RequestMethod.GET)
    public String verifyController(String openId, ModelMap model,
            HttpServletRequest request,
            HttpServletResponse response) throws ServletException
    {
        try
        {
            ParameterList paramList = new ParameterList(request.getParameterMap());
            DiscoveryInformation discovered = (DiscoveryInformation) request
            .getSession().getAttribute("openid-disc");
           
            // extract the receiving URL from the HTTP request
            StringBuffer receivingURL = request.getRequestURL();
            String queryString = request.getQueryString();
            if (queryString != null && queryString.length() > 0)
                receivingURL.append("?").append(request.getQueryString());
           
            // verify the response; ConsumerManager needs to be the same
            // (static) instance used to place the authentication request
            VerificationResult verification = manager.verify(receivingURL.toString(),
                    paramList, discovered);
           
            // examine the verification result and extract the verified
            // identifier
            Identifier verified = verification.getVerifiedId();
            if (verified != null)
            {
                request.getSession()
                    .setAttribute("openid", verified.getIdentifier());
            }
        }
        catch (OpenIDException e)
        {
        }
       
        return "redirect:index.do";
    }
   
    @RequestMapping(value="/logout.do", method=RequestMethod.POST)
    public String logoutController(String openId, ModelMap model,
            HttpServletRequest request,
            HttpServletResponse response) throws ServletException
    {
        request.getSession().removeAttribute("openid");
        return "redirect:index.do";
    }
}
[/code]
WEB-IINF/jsp/index.jsp
[code]
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!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=EUC-KR">
<title>오픈아이디 테스트</title>
</head>
<body>
<c:choose>
    <c:when test="${sessionScope.openid != null}">
        ${sessionScope.openid}님 환영합니다.
        <form action="logout.do" method="POST">
            <input type="submit" value="로그아웃"/>
        </form>
    </c:when>
    <c:otherwise>
        <form action="index.do" method="POST">
            <input type="text" id="openId" name="openId"/>
            <input type="submit" value="로그인"/>
        </form>
    </c:otherwise>
</c:choose>
<c:if test="${noopenid != null}">
    ${noopenid}는 없는 아이디입니다.
</c:if>
</body>
</html>
[/code]
view페이지에서 아이디를 치고, post요청을 하게 되면 indexPostController메소드가 호출이 됩니다. 여기서는 인증할 수 있는 URL을 redirect하게 됩니다. 그러면 OpenID를 제공하는 Provider에서 인증을 받고, returnURL로 이동을 해서 인증이 되었는지 확인 후 인증이 되면
Identifier verified = verification.getVerifiedId();
에서 Identifier 객체를 받을 수 있는데요. 이곳에서 오픈아이디를 구할 수 있습니다.

아 졸려-_-

 
Posted by 머드초보
,
 
우선 rath님이 올리신 글과 outsider님이 올리신 글을 참조했습니다.
(거의 똑같네-_-)

근데 이상하게 톰캣로그에서는 에러가 막 떨어지는데, 되네요-_-; 좀 더 확인해봐야겠네요 ㅠ

xrath님의 J2EE 환경에서 OpenID 지원 사이트 구축해보기
outsider님의 http://blog.outsider.ne.kr/164 http://blog.outsider.ne.kr/166

테스트환경은 TOMCAT6.0.18 + JDK 6u10 + Spring 2.5.6 입니다.

우선 http://code.sxip.com/ 이곳에서 라이브러리를 받습니다.
이클립스를 열어서 프로젝트를 하나 만듭시다.

Dynamic Web Project로 해서 만듭시다.
OpenIdTest라는 프로젝트로 만듭시다.

WEB-INF/lib에 라이브러리를 복사해야합니다. java-openid-sxip-0.9.4.jar이거 하나만 있으면 되는 줄 알았는데, lib폴더에 있는거 거의 다 필요하더군요-_-;
java-openid-sxip-0.9.4.jar
lib/commons-codec-1.3.jar
lib/commons-httpclient-3.0.1.jar
lib/commons-logging-1.03.jar
lib/htmlparser.jar
lib/openxri-client.jar
lib/openxri-syntax.jar
lib/endorsed/dom3-xercesImpl.jar
lib/endorsed/dom3-xml-apis.jar
lib/endorsed/xalan-2.6.0.jar
lib/xri/xmlsec-1.1.jar

그 외, 스프링과 jstl을 사용하기 위한 라이브러리를 복사합니다.
spring.jar
spring-webmvc.jar
standard.jar
jstl.jar

스프링을 위한 셋팅을 해봅시다.
web.xml파일을 수정합니다.
[code]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>OpenIdTest</display-name>

    <!-- SPRING FRAMEWORK DISPATCHER SERVLET CONFIGURATIONS -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class> org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>
</web-app>
[/code]
WebContent밑에 redirect.jsp파일을 생성합니다.
redirect.jsp
[code]
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>OPENID TEST</title>
</head>
<body>
<% response.sendRedirect("index.do"); %>
</body>
</html>
[/code]
WEB-INF 밑에 spring-servlet.xml을 생성합니다.
spring-servlet.xml
[code]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- ANNOTATION CONTEXT DEFINITION -->
    <context:annotation-config />
    <context:component-scan base-package="openidtest" />
   
    <!-- VIEW RESOLVER CONFIGURATIONS -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
   
</beans>
[/code]
아... 이제 셋팅이 완료되었어요.
다음 글에 계속.....-_-;

 
Posted by 머드초보
,
 
저는 대략 아래와 같이 나왔어요.
음...세상은 너무나 아름다워요~^^
여러분도 해보세요~ 아래사이트로 접속하면 바로 시작하더군요^^
http://www.idsolution.co.kr/




무난하고 보편적인 소년 소녀 취향

당신은 자본주의 문화 시장의 당당한 주류입니다.

당신은 대중 문화의 적극적인 소비자일수도 있고, 자기 주장이 별로 없는 소극적인 소비자일 수도 있습니다. 어떤 경우든, 당신의 가슴 밑바닥엔 낭만주의의 정신이 깔려 있습니다. 악하고 더러운 것으로부터 멀리 하려는 대중적 마인드가 바로 당신의 정신 세계인 것입니다.

당신의 취향은 과장해서 이런 상태에 가깝습니다.

당신은 모두가 공유할 수 있는 쉽고 편안한 취향을 갖고 있습니다. 누구라도 쉽게 친해질 수 있고 누구에게나 편안하게 접근할 수 있는 무난한 콘텐트를 지지하는 계층이라 하겠습니다.

어찌 보면 평범하다고 할 수 있겠지만, 당신의 취향이야 말로 자본주의 시장의 주류입니다. 대부분의 베스트셀러, 가요 차트 순위는 당신의 취향을 따라 가기 마련이며, 책, 음악, 미술, 영화 등 콘텐트 기획자들은 당신의 취향에 맞추기 위해 엄청난 노력을 기울입니다. 당신 취향에 맞지 않는 것들은 시장에서 실패하거나, 성공하더라도 대박을 치지 못하는 경우가 많습니다. 말하자면, 당신은 다른 취향이 누리지 못하는 당당한 메인스트림의 지위를 갖고 있다고 하겠습니다.

한국 음악사에 길이 남을 베스트셀러 음반들.
모두 당신 취향에 부합했기 때문에 성공할 수 있었습니다.

다만, 당신은 지나치게 비슷비슷한 종류의 콘텐트에 너그럽습니다. 좋게 말하면 쉽게 질리지 않는 것이고, 나쁘게 말하면 새로운 것에 부정적이라 하겠습니다. 경우에 따라선 취향이 뻔하고 남 따라하는 경향까지 있다는 비난을 들을 수도 있습니다. 하지만 이는 메인스트림의 지위를 가진 취향으로써 마땅히 감수해야 할 점입니다.


좋아하는 것
즐겁고 쾌활한 것이 좋습니다. 안 그래도 복잡한 세상, 철학이고 논리고 인생의 깊이고 논하기엔 너무 피곤합니다. 굳이 특이할 필요도 없고 굳이 고급스러울 필요도 없습니다. 당신은 즐거운 재미, 순수한 감동을 원합니다. 기분 좋게 산뜻한 내용의 콘텐트, 맑고 순수하게 만들어진 내용이면 더 바랄 것이 없습니다. 광고를 예로 들자면 다음과 같은 정도가 가장 적당할 듯 합니다.

"Love Your Lips" OLAY lipstick


저주하는 것
당신은 잘난 척, 지적인 척, 똑똑한 척을 제일 증오합니다. 건방지고 까다롭고 냉소적이고, 한 마디로 재수없는 것들이죠. 당신은 남보다 우월한 듯한, 뭐든 무시하는 듯한 것들을 참을 수 없습니다. 특히 뭔가를 가르치려는 듯한, 충고하려는 듯한 태도에 거부감을 느끼죠. 인생의 깊이에 대해, 삶과 사회와 문화예술의 문제에 대해 얘기하는 철학자를 만난다면 마음은 어느새 십리 밖으로 도망가 버릴 겁니다.  

 
Posted by 머드초보
,