구글 태그

2010년 3월 29일 월요일

아이폰 앱과 안드로이드 앱, 어느 쪽이 개발자에게 유리한 플랫폼인가..

요즘 개발자들 사이에서는 앱 개발이 크게 화제가 되고 있습니다. 다들 아시다시피 업무 특성상 부업-_-을 하기 힘든 프로그래머들이 특히 눈독을 들이는 것 같은데요. 각 플랫폼이 어떠한 가능성을 갖고 있을지, 어느 쪽이 더 나을지 검토를 해 봤습니다.

아이폰

장점
  • 단일 성능, 단일 해상도, 단일 OS의 안정적인 플랫폼
  • 간편한 결제 시스템의 검증된 수익성
  • 개발 환경이 안정화 되어있음

단점
  • 안드로이드 보다 하드웨어 스펙이 약간 떨어짐
  • 개발 환경 구축에 비용이 많이 듦
  • 생소한 개발 환경

안드로이드

장점
  • 개발 환경 구축에 비용이 들지 않음
  • 친숙한 개발 언어
  • 하드웨어 스펙이 아이폰 보다 앞섬

단점
  • 외견상으로는 통일되어 있지만, 실질적으로는 약간씩 동작의 차이가 있는 플랫폼
  • 결제 시스템이 부실하고 수익성이 떨어짐
  • 개발 환경 안정화가 아직도 진행중임


상호 비교이다 보니 한쪽의 장점이 반대쪽의 단점이 되는 식으로 정리되는데요. WIPI, MIDP 등의 모바일 플랫폼에서 약간 개발해본 경험으로 봐서는 안드로이드 플랫폼에서 실제로 모든 기기에서 동일하게 동작하는 게임을 만들기가 쉽지 않을 것 같습니다. 하드웨어의 미묘한 차이가 게임 플레이에 상당히 큰 영향을 미치는 경우가 많거든요. 특히 키 입력 같은 건 그러한 차이가 크게 나타나는 대목이라, 하드웨어가 통일되어 있지 않으면 제대로 만드는 게 쉽지 않습니다. 해상도가 여러 개 인 것도 대응하기가 쉽지 않은 문제구요. 게다가 안드로이드는 결제 시스템이 영 허술하다는 평가라, 사용자가 결제를 하지 않는 플랫폼에서 돈을 번다는 건 어불성설이죠. 결국 현재 레드오션으로 변했다는 아이폰 외에는 대안이 없는 상황인 듯 싶습니다. 안드로이드의 경우에는 어디선가 다른 곳에서 과금을 하고 스마트폰을 클라이언트로만 활용하는 서비스가 더 적합하지 않을까 하는 생각이 드네요.

2010년 3월 23일 화요일

닌텐도 3DS 공식 발표..

닌텐도 DS의 3D 버전이 발매된다는 소식이 닌텐도의 IR 페이지PDF 문서로 올라왔습니다.

닌텐도의 기계야 언제나 저가격 저성능에 독특한 세일즈 포인트를 갖고 시장에 승부수를 띄워왔는데, 이번엔 3D군요. 휴대용 기기에서 입체영상이라니, 시원하게 망할 것 같습니다만.

2010년 3월 17일 수요일

블로거닷컴에서 텍스트큐브로 이사하기..

이전에는 구글의 블로거닷컴에 둥지를 틀고 블로그를 운영했는데요. 블로거닷컴이 여러 가지로 우리나라 인터넷 사용자의 요구를 반영하지 못하기에 호시탐탐 이사할 기회를 노리고 있었습니다. 블로거닷컴이 불편한 점의 예를 들자면, 태그는 달 수 있지만 카테고리 별 분류를 지원하지 않아서 게시물을 큰 단위로 묶는 게 안되고, 우리나라 블로그들이 즐겨 쓰는 트랙백도 안되고, 댓글 달기도 불편하게 되어있고, 미묘하게 느린데다 레이아웃이 큼지막해서 우리나라 사용자들이 좋아하는 스타일도 아니구요.

맘에 드는 이사처-_-를 찾지 못하고 시간을 보내다 텍스트큐브로 옮기기로 정하고 계정을 만든게 2009년 5월인가 그랬습니다. 근데 막상 이사하려고 보니 게시물을 옮겨오는게 안된다는 치명적인 문제점이 드러났습니다. 블로거닷컴이 게시물을 파일로 묶어주는 형식과 텍스트큐브가 게시물을 파일에서 복원하는 형식이 서로 호환되지 않아서 옮겨올 수가 없는 거였습니다. 새 글만 텍스트큐브쪽에 올리고 이전 글은 블로거닷컴쪽을 유지하는 방법도 있었지만, 그렇게 하기엔 좀 지저분한 느낌이고, 이전 글에는 얽힌 트랙백도 없는데다 댓글도 별로 없으니 아쉽지도 않아서 과감히 다 옮기기로 정했는데, 막상 이사가 안 되는 거에요. 그래서 일단 보류했죠.

그리고 또 몇 달이 지나 2010년 3월이 됐는데, 아무래도 이사를 해야 할 것 같아서 아예 제가 변환프로그램을 만들기로 결심을 한 겁니다. -_-

자세한 개발 과정을 적는건 좀 귀찮기도 하고(소스코드에 주석 한줄도 안 달았는데!!) 어차피 알아들을 사람만 알아들을테니 그냥 프로그램을 공개할까 합니다.

블로거닷컴은 Formatted ATOM 형식으로 블로그를 내보내거나 불러올 수 있고, 텍스트큐브는 TTXML 형식으로 블로그를 내보내거나 불러오게 되어 있습니다. 따라서 Formatted ATOM 형식으로 블로거닷컴 블로그를 받아온 후에 TTXML 형식으로 변환한 다음 텍스트큐브에서 읽어오면 블로그를 이사할 수 있게 됩니다. 제가 작성한 변환기는 Formatted ATOM을 TTXML로 변환합니다. 다만 게시물의 제목과 본문, 작성일만 변환하기 때문에 댓글이나 각종 설정은 모조리 날아가게 됩니다. 한 3시간 정도 걸려서 대충 만들었기 때문에 일어난 일로, 제대로 구조를 잡아 만들면 댓글도 변환할 수 있을 것 같지만, 제가 필요가 없어서 구현을 안 했습니다. -_-;;

구현하다 깨달은 건데, TTXML은 설계가 좀 이상한 것 같습니다. 게시물의 작성일을 UNIX Timestamp 형식으로 저장하는데, 이건 좀 아닌 것 같아요. 플랫폼에 종속적이지 않도록 XML을 사용하면서 UNIX Timestamp를 그대로 쓰다니..

여하튼 첨부파일로 프로그램의 소스코드와 실행파일을 공개합니다. Visual C# 2008 Express에서 작성했으므로 빌드 시에는 Visual C# 2008 이상의 버전이 필요합니다. 수정할 필요 없이 사용만 하고 싶다면 첨부파일에 들어있는 실행파일을 실행해보시고, 안되면 Microsoft .NET Framework 3.5 SP1을 깔면 실행이 가능합니다. 실행하면 이렇게 나옵니다.



보시다시피 간단합니다. 블로거닷컴에서 생성한 XML 파일을 읽어와서 다른 이름으로 저장하면 프로그램이 이를 변환하고 결과를 화면 하단에 표시해 줍니다. 이렇게 해서 새로 생성한 파일을 텍스트큐브에서 읽어오면 됩니다. ^^;;

* 추가 *

블로거닷컴이 파일 첨부를 지원하지 않기 때문에 소스 코드 본문을 올립니다. UI 부분은 생략하고 XML 파싱하는 부분만 올립니다만, C#에 대하여 약간이라도 아시는 분이라면 별 어려움 없이 이용하실 수 있을 겁니다. 요청이 있고 파일을 올릴만한 곳이 있다면 전체 소스를 올리겠습니다. 그렇지만 텍스트큐브가 서비스를 접니 마니 하는 지금에 와서 그런 게 필요한 분이 있으실 리가..
//
// Formatted ATOM to TTXML Converter
//
// Copyright(C) 2010 Sei Zong Myoung
//
// Revision :
// 2010. 03. 16. Initial version.
//

using System;
using System.Windows.Forms;
using System.Xml;

namespace AtomToTtxml
{
public struct Post
{
public string title;
public string content;
public DateTime date;
};

public partial class AtomToTtxml : Form
{
XmlDocument atom;
XmlDocument ttxml;

public AtomToTtxml()
{
InitializeComponent();
}

private void Log(string str)
{
textBoxLog.Text += str;
textBoxLog.Text += "\r\n";
}

private void buttonLoad_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
if ( atom == null ) atom = new XmlDocument();
atom.Load(openFileDialog.FileName);
}
catch (XmlException ex)
{
Log(ex.Message);
}

if (atom.DocumentElement != null)
{
Log("ATOM parsed without any problem.");
textBoxAtom.Text = openFileDialog.FileName;
}
}
}

private void buttonSave_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
textBoxTtxml.Text = saveFileDialog.FileName;

if (ConvertAtomToTtxml())
{
ttxml.Save(saveFileDialog.FileName);
Log("TTXML saved without any problem.");
}
}
}

private bool ConvertAtomToTtxml()
{
try
{
int found = 0;

if (atom == null || atom.DocumentElement == null)
return false;

if (ttxml == null) ttxml = new XmlDocument();

ttxml.LoadXml("<?xml version='1.0' encoding='UTF-8'?>");

Post post = new Post();
foreach (XmlNode child in atom.DocumentElement.ChildNodes)
{
bool ret = false;

if (child.Name == "entry")
ret = ParseAtomEntry(child, ref post);

if (ret == true)
{
found++;

XmlElement elem = ttxml.CreateElement("post");
XmlElement title = ttxml.CreateElement("title");
XmlElement content = ttxml.CreateElement("content");
XmlElement published = ttxml.CreateElement("published");

TimeSpan ts = (post.date.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0));

title.InnerText = post.title;
content.InnerText = post.content;
published.InnerText = ts.TotalSeconds.ToString();

ttxml.DocumentElement.AppendChild(elem);
elem.AppendChild(title);
elem.AppendChild(content);
elem.AppendChild(published);
}
}

Log(found + " posts found.");

//ttxml.Save(Console.Out);
}
catch (XmlException ex)
{
Log(ex.Message);
}

return true;
}

private bool ParseAtomEntry(XmlNode node, ref Post newPost)
{
string id = "";
string title = "";
string content = "";
string date = "";
bool post = false;

foreach (XmlNode child in node.ChildNodes)
{
switch (child.Name)
{
case "title":
title = child.InnerText;
break;
case "content":
content = child.InnerText;
break;
case "published":
date = child.InnerText;
break;
case "id":
id = child.InnerText;
break;
case "thr:total":
post = true;
break;
}
}

if (!id.Contains("post") || post == false)
return false;

newPost.title = title;
newPost.content = content;
newPost.date = DateTime.Parse(date);

return true;
}
}
}

2010년 3월 16일 화요일

블로그를 이전합니다.

안녕하세요, 블로그를 이전합니다. 블로거닷컴이 우리나라 인터넷 사용자의 습관과 잘 안 맞아서 불편하던 차에 textcube.com으로 옮겨요.

http://remastered.textcube.com/

포스팅한 글들은 모두 이전할 주소로 옮겼는데(이거 옮겨주는 툴이 없어서 프로그래밍했어요;; 제작과정과 소스코드를 공개할까 합니다), 댓글만은 살리지 못했습니다. 그렇지만 댓글이 많은 것도 아니고 해서;;

한동안 이쪽의 글들도 유지하다가, 이전한 쪽의 틀이 잡히면 삭제할까 합니다.

그럼 저쪽에서 뵙는걸로. ㅎㅎ

2010년 3월 9일 화요일

Visual Studio 2010 기대됩니다..

회사에서 사용하는 컴파일러는 Visual Studio 2005입니다. 이전 회사에서는 2008을 썼는데, 작년 말에 옮긴 회사는 2005를 쓰고 있어서 역변태-_-를 하게 됐습니다. 그래서 2010이 어느덧 출시를 목전에 둔 RC(Release Candidate)버전까지 나왔다는 소식은 웹 상에서 들었지만 별 관심을 갖지 못하고 있었는데, 오전에 잠시 짬이 난 틈에 2010의 C++ 컴파일러에 어떤 변화가 있는지 찾아보게 되었습니다.

와우.

완전히 새로운 IDE에 컴파일러와 직접 통합된 IntelliSense, 새로운 C++ 표준 지원까지. 정말 좋아진 것 같습니다. IntelliSense의 데이터베이스로 SQL Express를 사용한다니 개발 PC의 요구사항이 꽤 높아질 것 같아서 약간 우려되지만, 기능면에서는 그야말로 막강해질 듯 하네요.

이번에도 Express 버전이 나오겠죠? 회사에서는 못 써볼 것 같으니 출시되면 집에서 Express라도 써봐야겠네요.