안드로이드의 패스위의 텍스트

수년전에 오렐리라는 출판사에서 나온 자바의 2D API를 보면서… 이 API를 이용해 2D GIS 엔진을 자바로 만들면 정말 환상이겠구나… 라는 생각을 했던 적이 있었습니다. 그런데.. 안드로이드를 살펴보면서 또 다시 이런 생각이 다시 듭니다.. 안드로이드가 내세우는 주요 개발 언어가 자바라는 점과 이러한 생각은 우연이 일치이겠지만 말입니다. 또 다시 이러한 생각을 들게 만드는 안드로이드의 기능은 아래와 같은 기능 때문입니다. 즉, Path을 따라 사용자가 표현하고자 하는 텍스트를 자연스럽게 회전시켜주는 기능입니다.

사용자 삽입 이미지
참으로.. 아름답습니다! 그럼 어떻게 이렇게 하는지 안드로이드 맛보기 겸해서 코드를 잠시 살펴보도록 하겠습니다. 물론 안드로이드를 잘 아시는 분들은 걍.. 살짝 패스해주셔도 됩니다!

먼저 간단히 View를 하나 만듭니다. View 클래스는 안드로이드에서 위젯(UI 컨트롤)을 나타내는데 유용한 부모클래스입니다..

public class MyView extends View {
    public MyView(Context context) {
        super(context);
    }
 
    public void onDraw(Canvas canvas) {
        Path path = new Path();
        canvas.drawColor(Color.BLACK);
  
        Paint Pnt = new Paint();
        Pnt.setAntiAlias(true);
        Pnt.setStrokeWidth(1);
        Pnt.setColor(Color.GREEN);
        Pnt.setStyle(Paint.Style.STROKE);

        path.moveTo(10, 10);
        path.cubicTo(80, 150, 100, 220, 310, 410);
        
        Pnt.setColor(Color.GREEN);
        canvas.drawPath(path, Pnt);
  
        Pnt.setTextSize(40);
        Pnt.setStrokeWidth(1);
        Pnt.setStyle(Paint.Style.FILL);
        Pnt.setColor(Color.WHITE);
        Pnt.setAntiAlias(true);
        canvas.drawTextOnPath("안드로이드의 패스위 문자열 표현", path, 0, 0, Pnt);
    }
}

즉, 문자열이 표시될 방향을 결정할 Path 객체를 만들어주고.. Canvas의 drawTextOnPath 매서드를 통해 원하는 문자열을 표시해주기만 하는.. 매우 효율적인 API를 제공합니다. 이제 이 View를 실제로 사용하는 Activity를 정의합니다.

public class UseMyView extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MyView vw = new MyView(this);
        setContentView(vw);
    }
}

안드로이드에서 Activity는 실제로 화면에 표시되지는 않지만 화면을 구성하는 가장 핵심이 되는 단위로.. View를 컨트롤하여 화면에 개발자가 원하는 컨텐츠를 표시할 수 있습니다. 안드로이드의 2D 그래픽스…. 많은 모바일 API를 경험해 보지는 않았으나… 정말 이 정도로 뛰어난 2D 그래픽 API를 제공하는 모바일 개발 플랫폼이 있을까… 싶습니다..

클라언트에 대한 서버측에서의 에러 응답

자바를 이용하여 웹서버를 내장하는 공간 데이터 서버를 개발하면서.. 클라이언트에서 잘못된 요청에 대해 서버가 가장 적절한 에러 코드를 클라이언트에게 전달하도록.. 다양한 에러 코드에 대해서 클라이언트에서 어떤 식으로 표시되는지를 확인해 보았습니다. 마이크로소프트의 IE 버전 8.0에서 확인을 하였으며… 다른 웹브라우저에서는 비슷하기는 하겠지만 다른 모습으로 표시될 수도 있겠습니다.

BAD_REQUEST Code (HTTP 400)
사용자 삽입 이미지

CONFLICT Code (HTTP 408 / HTTP 409)
사용자 삽입 이미지
FORBIDDEN Code (HTTP 403)
사용자 삽입 이미지
GONE Code (HTTP 410)
사용자 삽입 이미지
HTTP_VERSION_NOT_SUPPORTED Code (HTTP 501 / HTTP 505)
사용자 삽입 이미지
INTERNAL_SERVER_ERROR Code (HTTP 500)
사용자 삽입 이미지
METHOD_NOT_ALLOWED Code (HTTP 405)
사용자 삽입 이미지
MOVED_PERMANENTLY Code, MOVED_TEMPORARILY Code,
NO_CONTENT Code, SEE_OTHER Code

사용자 삽입 이미지
NOT_ACCEPTABLE Code (HTTP 406)
사용자 삽입 이미지
NOT_FOUND Code (HTTP 404)
사용자 삽입 이미지
NOT_IMPLEMENTED Code (HTTP 505)
사용자 삽입 이미지
REQUEST_TIMEOUT (HTTP 408 / HTTP 409)
사용자 삽입 이미지
이 외에도 다양한 코드가 존재하지만 IE에서는 처리하지 못해 클라이언트에게 적절한 처리를 하지 못하는 경우에 대한 코드는 제외하였습니다.