iCal을 이용한 EPG

January 31st, 2009 View Comments

EPG(Electronic Program Guide) 방송 편성표를 어떻게 하면 쉽게 볼 수 있을까 하다가,

  1. xml을 xslt를 이용해 html로 변환
  2. RSS형태로 publishing

을 생각하다가 iCal에서 사용하는 ics 형태로 하면 iCal이 알아서 다 표현도 해줄것이고,

  • MacOSX에서는 iCal에서 구독 하면 되고
  • iCal과 동기되는 iPod Touch/iPhone에서도 볼수 있고
  • Windows Vista도 ics를 지원하는 캘린더가 기본 포함 되었고,
    아마 Outlook도 지원할것이고
  • Google Calender도 같은 ics를 구독하면 언제 어디서나 볼수 있고

그래서 EPG 데이터를 ICS 포맷으로 변환하면 멋지겠다는 생각이 들었다.

방송사 별로 ICS를 생성하고 각 방송사 별로 ICS는 최대한 추려서 다음과 같이 쓰기로 했다.

BEGIN:VCALENDAR
PRODID:-//TTA//EPG DATA//KO
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-TIMEZONE:Asia/Seoul
X-WR-CALNAME:MBC
BEGIN:VEVENT
DTSTART:20090131T223500
DTEND:20090131T235500
UID:MBC20090131T223500
CLASS:PUBLIC
DESCRIPTION:장르 : 연예/오락-토크쇼
출연 : 윤종신,김국진,김구라,김성주,신정환,이하늘,박미선
연출 : 여운혁,김유곤
SUMMARY:명랑 히어로
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

ruby로 만든 ics를 iCal에서 읽어보니
결과는 일단 성공…

대충 상상했던 EPG형태로 보여주기는 하나, 실생활에 편히 쓸만큼 보기 편한거 같지는 않다.

그리고, 당장 쓰기에는 또 다른 문제가 좀 있다.

  1. 주기적으로 책임감 있게 변환 script를 돌려줄 서버가 필요하고,
  2. CalDAV로 iCal에서 쓰려면 WebDAV 호스팅이 되어야 하는데, 그렇지 아니하고,
  3. ics로 변환해서 그냥 web에 두고 google calendar에서 구독하면 그걸 다시 iCal에서 불러올 수 있다.
    그래서 google calendar에서 읽어보니 한글이 깨진다…
    (분명 UTF-8으로 저장되어 있는데, KSX1001을 UTF-8으로 읽었을때 처럼 깨진다..)

OTL 일단 오늘은 여기까지…..

XSLT로 만든 XMLViewer

January 30th, 2009 View Comments

xml의 많은 장점에도 불구하고 떨어지는 readability엔 불만이다.
업무상 xml을 자주 만지다 보니 xml 내의 정보를 쉽게 보는 도구가 간절했고, 그래서 예전에 java로 만든 TreeView 형태의 XmlViewer도 만들었다.

이번에는 xlst로 만들었는데 생각보다 깔끔하고 맘에 든다.
TreeView 형태보다 쉽게 포함관계를 표현한다.

맨 처음, element와 attribute를 일일히 지정하면서 xslt를 작성하다 보니 1000라인이 넘어 섰다.
그래서 거의 90% 완성된 시점에서 처음부터 다시 시작해 element와 attribute의 이름을 지정하지 않는 형태로 바꾸었더니 css, javascript를 포함해서 120라인 가량으로 끝낼 수 있을 뿐더러 특정 dtd/schema의 xml 뿐만 아니라 범용 XMLViewer로 사용가능해 졌다.

만들다 보니 포함관계만 표시하는 심플한 뷰, 모든정보를 빠짐없이 보여주는 뷰를 표현하기 위해 javascript를 이용했고 web에서 찾은 코드를 근간으로 했는데
원리는 숨기거나 보여질 영역을 < div class="ClassName" >으로 설정한뒤 해당 class를 가지는 element를 돌면서 처리하는 루틴이었다.

문제는 C 스타일의 for 루프문

for( var i=0; i<Max; i++){
   BLOCK;
}

이 내가 주로 사용하는 브라우저인 safari에서는 돌지 않았다.

그래서

for( var i in Collection){
   BLOCK;
}

형태로 바꿔서 브라우저 의존성을 제거하고,

포함관계를 색상으로 표현하기 위해서 CSS에서

*                      {background: none;}
div                  {background: #6666ff;}
div>div           {background: #7777ff;}
div>div>div    {background: #8888ff;}

형태로 가능했다.

내가 javascript/CSS 쪽은 거의 문외한이라 이게 최적의 코드인지는 모르지만, 내가 원래 의도했던 기능이나 목표는 다 동작해서 맘에 든다.

그리고 지금까지 < xsl:apply-templates/>는 select로 자식 element를 지정해야지만 되는줄 알았는데,
그냥 apply-templates만 불러주니 알아서 자식 element들을 알아서 불러주네…(오늘 첨 알았음 ^^;)

Simple View

Complex View

<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
<html>
<head>
<title>XML Viewer</title>
<style type="text/css">
div.element{
	float:        left;	
	display:     block;	
	padding:    1em;	
	border:     solid 1px black;	
	margin:     1em;
}

/* 
	element의 이름과 attr을 header-area로 싸는 이유
	attr 옆에 하위 element가 붙는게 보기 싫어서...
	정답은 	overflow:auto;
*/
div.header-area{
	overflow:	      auto;
	background:  none;
}

div.attr{
	float:            left;	
	margin-right:  2em;
	background:  none;
}

i.att_name{ color:	#333333}
i.att_value{ color:	#666666}

/*
	nested elemement를 다른 색으로 표시하기
	이게 제일 좋은 방법인지는 모르겠지만...
*/
*                                                                    {background: none;}
div                                                                 {background: #6666ff;}
div>div                                                          {background: #7777ff;}
div>div>div                                                   {background: #8888ff;}
div>div>div>div                                            {background: #9999ff;}
div>div>div>div>div                                     {background: #aaaaff;}
div>div>div>div>div>div                              {background: #bbbbff;}
div>div>div>div>div>div>div                       {background: #ccccff;}
div>div>div>div>div>div>div>div                {background: #ddddff;}
div>div>div>div>div>div>div>div>div         {background: #eeeeff;}
div>div>div>div>div>div>div>div>div>div  {background: #ffffff;}
</style>

<script type="text/javascript" language="JavaScript"> 

	function toggle(obj){
		if(obj.style.display != "block")
			obj.style.display = "block";
		else 
			obj.style.display = "none";
	}

	function toggle_all_attr(){
		var divs = document.getElementsByTagName('div');
		var tcl = " attr ";
		for( var i in divs ){
			 var test = " " + divs[i].className + " ";
			 if(test.indexOf(tcl) != -1){
			 	toggle(divs[i]);
			 }
		}
	}

</script>
</head>
<body>
	<h2><a href="#" onclick="toggle_all_attr()">simple/complex</a></h2>
	<xsl:apply-templates/>
</body>	
</html>
</xsl:template>

<!-- element 처리 -->
<xsl:template match="*">
	<div class="element">
	
		<!-- 본인의 attr 처리하고 -->
		<div class="header-area">
			<h3><xsl:value-of select="name(.)"/></h3>
			<xsl:apply-templates select="@*"/>
		</div>

		<!-- sub element들 처리... -->
		<xsl:apply-templates/>
		
	</div>
</xsl:template>

<!-- attribute 처리 -->
<xsl:template match="@*">
	<div class="attr">
		<i class="att_name"><xsl:value-of select="name(.)"/></i><br/>
		<i class="att_value"><xsl:value-of select="."/></i>
	</div>
</xsl:template>
</xsl:stylesheet>

Perl One Liner

January 28th, 2009 View Comments

주로 하는 짓거리가 텍스트를 가지고 조물락 거리는 거라,
Unix에서 find, sed, awk 조합으로 어지간 한거는
bash/perl/ruby까지 가지 않고 처리하고 있지만,

파일을 열어, 수정하고, 다시 저장하려면, open 한 파일과 save할 파일이 동일해서,
파이프( | ) 를 이용해서 tmp파일을 만들고는 하지만,
find -exec 속에서 파이프를 쓸 수가 없어서 이럴때는 perl one liner가 제격이다.

자주 쓰는 Perl one liner…

find . -name "file.*" -exec perl -i -pe 's|BEFORE|AFTER|g' {} ;

그 밖의 perl one liner
링크1, 링크2

Windows 에서 /etc/hosts 파일 위치.

January 28th, 2009 View Comments

결론은

/ Windows / system32 / drivers / etc

Unix(MacOSX 포함해서)에서는 /etc/hosts 파일을 내 입맛에 맞게 수정해서 쓰고 있는데,
Windows에도 있는 건 알고 있었지만, 위치가 지저분해서 외우고 있지는 않아 오늘 찾아 봄.

Win 9X/ME는 관심 없고, Windows NT 계열의 2000, XP, Vista에서는 유효

1월 17일 뻘짓후기 – 최악의 상황

January 19th, 2009 View Comments


지난 8월 인수한 Meade 14인치 ACF와 AP eq1200 마운트를 아직도 세팅을 못하고 있다.
밴드가 없어서인데, 미국의 parallax사가 Meade 14인치용 밴드를 팔고 있었다. (별통에서 C14 밴드를 빌려줘서 올려보니 Meade14가 아주 열받게 조금 더 크다)

8월 수입의뢰한 밴드가 우여곡절 끝에 국내에 들어오고 별통에서 위 아래 플레이트를 제작하고서, 4개월이 지난 이제서야 가족이 강원도로 갔다.

이번엔 촬영 보다는, 세팅된 장비앞에서 기념 가족 사진을 찍기 위해서…

조립했더니 문제가 여기저기서 나왔다.
위사진 보면 크기가 감이 안오겠지만, 적도의가 EQ1200이다. (C8에 EQ-6가 아니라…)
망원경을 올리기 위해서 두손을 머리위로 번쩍들어 장착해야했고,
경통위에 피기백이라도 올릴려면 사다리 타고 올라가야 할판이다.
파인더도 정상위치에 장착했다면 사다리 타고 봐야 할뻔했다.
(다행히 밴드 옆면을 쳐내고 다카하시 Finder Holder를 붙이게 가공했다.)

무게추도 작아보이지만, 10Kg짜리 3개이다.(Em200 추는 참고로 5Kg)
밴드만 10Kg가까이 나가버리는 바람에 경통만 달랑 올리고 무게추 3개를 다 써버렸다.
카메라 붙이고, 위에 가이드 경통이라도 올리면 무게 초과( 오늘 결국 10 Kg 하나더 추가 제작 의뢰)

근데 이게 뭔감.

일부러 Meade14 전용이라 수입한 밴드가 이번엔 더 큰거다.
그것도 무려 8mm나

결국은 밴드 내부에 뭔가를 채워야 할텐데…
국민학교 시절 뒷벽 게시판에 사용하는 녹색천과 같은 재질을 구해서 여려겹 덧대야 할꺼같다.
그 재료의 이름을 몰라서 별통에 전화 했더니, 방산 시장 카펫 파는곳에서 구할 수 있다는데, 이름은 별통 사장님도 모르셨다.

인터넷 뒤져보니, 부직포 파이텍스란 소재이고, 전시행사장이나 시상식 레드카펫으로 사용하는 바닥재란다…

담주는 설이고, 다담주에는 꼭 세팅 완료…

TV 리모콘으로 물건을 사다

January 15th, 2009 View Comments


최근 MBC에서 ACAP을 이용한 TCommerce 서비스를 론칭 하였다.
이름은 mbcTshop이다.

물론 100% 리모콘만으로 구입 가능한 것은 아니라, 먼저 mbcTshop을 PC에서 접속해서 사용자 계정을 만들고, 배송지를 등록해 놓을 필요는 있다.
이후에는 TV 리모콘으로 구입이 가능한데, ACAP 데이터방송이 지상파 전파로 전송되지만, 리턴채널을 위해서는 TV가 internet에도 연결 되어 있어야 한다.
그리고 30만원 이하의 물건은 리모콘만으로 구입가능하지만, 30만원 이상의 물건은 전자상거래용 인증서가 담긴 USB 메모리 스틱을 TV에 삽입하고 인터넷에서 하듯 본인 인증을 거쳐야 한다.
리모콘만으로 패스워드 입력하기는 만만치 않을듯… (이 부분은 당장 활성화되기 힘들꺼라 생각된다. 물론 요즘 TV가 블루투스를 장착하기 시작하고 블루투스 키보드 스택을 TV에서 구현한다면 얘기가 달라지겠지만… 하다못해 USB 키보드 드라이버 만이라도 당장…)
보안 정도는, Tshop용 숫자로 이루워진 패스워드와 신용카드 비밀번호로 보호 받지만, 리모콘을 이용하는 만큼 사용 편의성을 감안하면 적당한 타협인듯…


Tshop에 로그인 한 화면이다. 최근 지상파 방송사와 가전사가 함께 합의해서 만든 데이터방송 로고가 사용되었다.
Tshop에서 제일 싼 무한도전 달력을 사 보았다. ACAP TV를 통해서 사면 배송료 2000원을 깍아준다.

현재 시청중인 프로그램에 연동되는 형태까지는 아니지만, 향후에 보편화 되면 기대해 본다.

구입화면

Continue reading »

적과의 동침

January 15th, 2009 View Comments

적과의 동침
요즘 퇴근하면 항상 침대위에 모든 자동차들이 일렬로 주차되어 있다.

저렇게 주차된 차들을 보면 항상 떠오르는 영화가 있다.

운동을 시작하다 WiiFit

January 15th, 2009 View Comments

주말에 장을 보다가 아무 생각없이 WiiFit을 샀다.

집에 Wii는 전 주인이 출시 당일 일본에서 줄서서 산 초기 일본판 버전이어서 지역이 틀려 3일동안 사용 못하다가,
우여곡절 끝에 GeckoOS 통해 간신히 실행할 수 있었다.

더 이상의 언급은 위험하고…

BMI지수 지극히 정상이고
신체 균형 나이 26살 판정 받았다.
ㅋㅋㅋ

IC1805 하트 성운

January 13th, 2009 View Comments

태아 성운과 같은날 찍은 성운이다.
하트모양과 같아서 하트성운이라 불리우지만, 우리 아마추어들은 민망한 성운이라 부른다.
이 이미지에서도 중앙 아랫부분이 상당히 민망하게 잘 나왔다.

태아 성운과 상당히 인접해 있어 500mm화각에 4장 모자이크 하면 함께 넣을 수 있어서 모자이크 하려다가 중간에 잠들어 버렸다.

Nada에는 예전에 올렸는데 정작 내 블로그에는 올리지 않아서 이제서야 올린다.

하트 성운
하트 성운
(언제나 처럼 클릭해서 크게볼수 있음)

█ 촬영정보

촬영 일시 : 2008년 11월 20일
촬영 장소 : 덕초현 하늘이 천문대
촬영 장비 : STL11000 + EM200Temma2Jr + Epsilon180 + Astrodon Ha(6nm)LRGB filters + LPS-P2 filter
노출 시간 : L:Ha:R:G:B = 2:60:9:9:9
단위 촬영시간 : Ha = 10, RGB = 각 3분
이미지 처리 : 
   Align, Combine, Stack : Maxim
   후처리 : Adobe PS3

IC1848 태아 성운? 강아지 성운? Embryo Nebula?

January 13th, 2009 View Comments

11월 20일 가족들과 함께 가서 찍은 태아 성운이다.
보통은 태아 성운이라고 불리우지만, 이번에 찍고 보니 태아 보다 강아지 스러운 느낌이 들어
강아지 성운으로 이름 붙여봤다.

보통 인공위성이 지나가면 이미지 합성단계에서 제거하지만, 이번에는 B채널에서 유성이 지나가서
일부러 삭제하지 않고, 살려봤다.

캘리포니아 성운
(언제나 처럼 클릭해서 크게볼수 있음)

█ 촬영정보

촬영 일시 : 2008년 11월 20일
촬영 장소 : 덕초현 하늘이 천문대
촬영 장비 : STL11000 + EM200Temma2Jr + Epsilon180 + Astrodon Ha(6nm)LRGB filters + LPS-P2 filter
노출 시간 : L:Ha:R:G:B = 2:60:9:9:9
단위 촬영시간 : Ha = 10, RGB = 각 3분
이미지 처리 : 
   Align, Combine, Stack : Maxim
   후처리 : Adobe PS3

나베르(Naver)에 나의 사진이…

January 11th, 2009 View Comments

Naver에 홈에 내사진 장미성운이 타이틀로 붙었다.

올초 개편에 추가된 네이버캐스트 내에 오늘의 과학
천문가들의 재치
재미난 별명의 성운들
편이 실렸다.

실은 한국천문연구원으로 부터 사진 저작권 사용에 대해 허락을 요구했었고,
비상업적목적에 한에 사용해도 좋다고 한바 있었다…

airclick으로 eyetv 컨트롤 하기

January 7th, 2009 View Comments

pinnacle
내 방에서는 TV를 MacOSX 상에 pinnacle HDTV stick과 eyetv로 보고 있다.eyetv2
Windows에서 TV를 볼때는 마지 못해 보는거였지만, Mac에서는 TV로 보는거 보다 훨씬 더 편하고 좋다.
MacOS 탓이라기 보다는 EyeTV라는 프로그램이 훌륭해서다.
물론 신호 내의 한글로 된 EPG는 다 깨먹지만 말이다.

airclick
pinnacle HDTV stick용 리모콘이 요즘 안보인다. 하늘이 소행으로 보이지만 물증이 없다.
그래서 불편하던 차에, 원래 가지고 있던 AirClick으로 EyeTV를 컨트롤 하려고 찾아봤더니 insanelymac에 해당 정보를 찾았다.
Windows용은 컴파일해야 하지만, Mac은 script로 만들어 놓고, functions.plist만 편집하면 되는 형태.
앞으로도 다양한 용도로 활용 가능해 질거 같은 느낌이다….




functions.plist파일을
/Applications/AirClick.app/Contents/Resources/
나머지 applescript 파일들을
/Applications/AirClick.app/Contents/Resources/scripts/
폴더에 복사하면 된다.

eyetv