January 31st, 2009 View Comments
EPG(Electronic Program Guide) 방송 편성표를 어떻게 하면 쉽게 볼 수 있을까 하다가,
- xml을 xslt를 이용해 html로 변환
- 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형태로 보여주기는 하나, 실생활에 편히 쓸만큼 보기 편한거 같지는 않다.
그리고, 당장 쓰기에는 또 다른 문제가 좀 있다.
- 주기적으로 책임감 있게 변환 script를 돌려줄 서버가 필요하고,
- CalDAV로 iCal에서 쓰려면 WebDAV 호스팅이 되어야 하는데, 그렇지 아니하고,
- ics로 변환해서 그냥 web에 두고 google calendar에서 구독하면 그걸 다시 iCal에서 불러올 수 있다.
그래서 google calendar에서 읽어보니 한글이 깨진다…
(분명 UTF-8으로 저장되어 있는데, KSX1001을 UTF-8으로 읽었을때 처럼 깨진다..)
OTL 일단 오늘은 여기까지…..
태그: epg, ical, iptv, mac, ruby, 프로그래밍
카테고리: IT
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>
<xsl:template match="*">
<div class="element">
<div class="header-area">
<h3><xsl:value-of select="name(.)"/></h3>
<xsl:apply-templates select="@*"/>
</div>
<xsl:apply-templates/>
</div>
</xsl:template>
<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>
태그: xml, xslt, 소개, 프로그래밍
카테고리: IT
January 7th, 2009 View Comments

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

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/
폴더에 복사하면 된다.

태그: airclick, eyetv, mac, 다운로드, 소개, 팁, 프로그래밍
카테고리: IT, Life
May 22nd, 2008 View Comments
1. 무작정 Visual Studio 2008을 띄우고 C# WinForm 프로젝트 생성
2. [Add Reference]에서 Microsoft.DirectX.AudioVideoPlayback를 추가해주고(DirectX는 깔려 있어야 함)
3. Form을 더블 클릭하고 다음과 같이 쳐준다.
using Microsoft.DirectX.AudioVideoPlayback;
private void Form1_Load(object sender, EventArgs e){
Video v = Video.FromFile(@"c:\test.avi");
v.Owner = this;
v.Play();
}
4. F5를 누른다.
근데 안된다.
[Debug]-[Exceptions]-[LoaderLock]의 Thrown 항목을 꺼준다.

5. F5를 누른다.
ㅋㅋㅋ 성공 ….

[잡설]
이번 일주일간 WDM 디바이스 드라이버 프로그래밍 교육중이다.
Kernel Mode 프로그램에서는 좀만 잘못하면 블루 스크린…
오랜만에 보는 VisualStudio… 안보던 사이 많이 바뀌었었네…
태그: IT, microsoft, windows, 프로그래밍
카테고리: IT
May 14th, 2008 View Comments
루비 공부 시작한지 다음날 문득
Unicode의 한글 영역을 전부 출력하는 프로그램을 ruby로 짜면 어떻게 될까 궁금해 졌다.
머리 속에서는 직관적으로
란 코드가 떠 올랐다. 겁나 멋지다.
‘가’의 Unicode가 AC00인지 모르더라도 (‘힣’의 코드 값은 외우고 있지도 않다.) Range가 지원해주지 않을까?
다른 언어라면 분명 루프가 빙빙 돌고,
‘가’가 아닌 AC00부터 code값을 증가시키면서…. 어쩌구 저쩌구 하는 코드가 될터인데….
근데 안돈다.
더 정확히는 도는듯 하다 만다.
이유는 ruby String의 내부처리가 UTF-8이어서 그랬다.
이런 젠장….
UTF-8도 Unicode 인코딩 기법중 하나 맞고, 나름 장단이 있는 유니코드 인코딩이지만,
직렬화나, 네트웍 전송시에나 적합한 인코딩이고, 메모리 내부 처리는 UCS2나 하다 못해 UCS4로 처리함이 맞다고 본다.
그래야 기껏 Unicode에서 욕먹어 가면서 현대 한글 11072자 모두 할당 받아 한글 처리가 조합형처럼 처리가 가능하고, 한글 소팅 문제나…..
기타등등…(욕까진 안먹었나? 하지만 눈치 보면서…)
아마도 ASCII가 1byte로 인코딩되는 점 때문에 (영어권 프로그래머의…)힘에서 밀린듯 하다.
암튼 String succ메소드를 건드리고야 말았다.(별 바람직해 보이진 않지만…)
class String
def succ
head = self.unpack('U*')
tail = head.pop
return head.pack('U*') + [tail + 1].pack('U*')
end
end
("가".."힣").each{|x| print x}
("あ".."ん").each{|x| print x}
puts "가나다".succ
가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬
갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓걔걕걖걗걘걙
...
힟힠힡힢힣あぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとど
なにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん가나닥
가능성은 희박하겠지만, ruby 2.0에서는 제발 UCS2나 4로 String 내부처리가 바뀌었으면 하는 바람이다.
태그: IT, ruby, 프로그래밍
카테고리: IT
May 14th, 2008 View Comments
회사 업무에, 용도에 따라 주로 다양한 언어를 사용하지만,
한번 쓰고 말거나, 간단한 처리는 주로 perl을 이용한다.
주로 하는 일이 UI가 필요없고,
주로 Unix환경인데다가,
text처리가 대부분이라 regula expression 이 강력해서 perl이야 말로 아주 적격이다.
ruby란 언어를 처음 접한건 1999년도 일본서 공부할때다.
자연어처리 연구실이라 그곳 역서 text처리가 대부분이다.
ruby 공부하던 인간도 몇 있었지만, 그저 취미 일뿐,
실용적인 측면에서는 그 연구실 조차 perl이었다.
그래서 나도 perl을 그곳에서 배우기 시작했다.
Unix + Emacs + Perl.
그랬던 ruby가 몇년 전 부터 하도 유행이라, 나도 공부해 보고 업무에도 적용해 보고 싶었지만,
팀에 초 고수 perl 본좌가 2명이나(noise & gogma) 있는 바람에
혼자서만 ruby코드를 양산할 수 없어서, 나도 친숙하고 모두가 다 아는 perl 이 주종이었다.
최근에 이 둘을 꼬셔서 루비 공부 시작…
꼬시는데 뭐 어려운거 없었다.
황대산 님의 20분짜리 가이드한번 보여줬더니
바로 루비 광신도로 변신…
회사 도서관에 있는 ‘Programming Ruby’를 죄다 빌려다 모두 공부 중.
근데 도대체 대충 읽을 수가 없다.
한줄 한줄 의미를 곱씹으니 아주 오묘하다는 것.
특히 문법 설계가 아주 예술이다.
예전에 신군이랑 메신저로 잠깐 나눴던, Code Block이랑 Meta Programming이 왜 필요한지 왜 써야 하는지 이해가 가지 않았는데,
이것참 물건이다.
당분간 루비 얘기로 블로그가 도배될꺼 같다.
태그: IT, perl, ruby, unix, 프로그래밍
카테고리: IT
March 5th, 2008 View Comments
21세기인 지금에도 많은 기계들이 시리얼 포트를 사용하고 있다.
TV나 STB같은 경우는, AS나 디버깅 용으로,
그리고 많은 천체장비들은 아직도 시리얼통신이 주가 아닌가 싶다.
업무상 TV의 시리얼 로그를 봐야하는 경우가 종종 있는데….
맥에서는 여태까지 어떤 프로그램으로 해야 하는지 몰랐는데.
일단
Windows에서는 TeraTerm을 많이 사용하는거 같은데
Mac용으로는 어떤프로그램으로 보는지 몰랐다.
시리얼 로그를 보는 프로그램으로는
이 있고
minicom이 가장 낳아 보였고, 간결함은 screen이 압도적인거 같다.
심지어 screen은 설치도 필요없이 기본 내장이다.
Mac에 시리얼 포트가 없으므로 USB2Serial 젠더로 연결하고 해당 드라이버를 설치하면
/dev/tty.usbserialXXXX 라는 디바이스가 보일 것이고
$screen /dev/tty.usbserialXXXX 9600
태그: IT, mac, seriallog, 소개, 팁, 프로그래밍
카테고리: IT
November 13th, 2007 View Comments
회사서 Class를 조사할 일이 있는데 reflect를 까먹어서 한동안 googling 해서 다시 학습…
java.lang.String의 method를 출력하는 루틴의 골자만 요약하면….
import java.lang.reflect.*;
public class ClassExam{
public void printClassInfo(String className){
try{
Class a = this.getClass().getClassLoader().loadClass(className);
Method[] methods = a.getDeclaredMethods();
for(int i=0; i<methods.length; i++){
System.out.println(methods[i].toString());
}
}catch(Exception e){
}
}
public static void main(String[] args){
ClassExam a = new ClassExam();
a.printClassInfo("java.lang.String");
}
}
태그: codemonkey, codesnipet, IT, java, 프로그래밍
카테고리: IT
July 5th, 2007 View Comments

나처럼 코딩할때, 웹브라우저 부터 실행하고, 각종 프로그램 조각들을 cut&paste 해서 완성해가는 코드몽키들에게 Java Programming 할때, 아주 유용한 사이트.
회사서 testcase 개발할때, 아주 많은 도움이 되었기에 여기에 포스팅.
태그: codemonkey, IT, java, 소개, 프로그래밍
카테고리: IT
April 20th, 2007 View Comments
최근에 me2day 시작했다.
중독성 심하다는 말에 그냥 괜한 말인줄 알았는데…
steelheart 님의 me2day 파도타기란거 보고서 나도 만들어 보고 싶어서 me2day 브라우저란걸 만들었는데…
차이점이 있다면, steelheart님은 java인거 같고,
내꺼는 me2day의 friends.xml을 가져와서 friends.xslt로 그냥 렌더링 해버리는 거다.
그러므로 만드는데는 몇분 걸리지도 않았다.
기술적으로야 어떻건 간에 만들고 보니, 이거 완전 플톡스러운? 짖 아닌가???
steelheart 님에게는 사실대로 이실직고 하였고,
간추린 xslt는 대략 다음과 같다.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/friends">
<h3><xsl:value-of select="@friends_of"/>'s friends (<xsl:value-of select="count(friend)"/>명)</h3>
<ul><xsl:apply-templates match="friend"/></ul>
</xsl:template>
<xsl:template match="friend">
<li>
<xsl:value-of select="@user_id"/>
<a>
<xsl:attribute name="href">/wp/me2day/?id=<xsl:value-of select="@user_id"/></xsl:attribute>
<img><xsl:attribute name="src"><xsl:value-of select="profile_image"/></xsl:attribute></img>
</a>
</li>
</xsl:template>
</xsl:stylesheet>
태그: me2day, 소개, 프로그래밍
카테고리: IT
March 15th, 2007 View Comments

어느 블로그나 검색 메뉴가 있다. 나의 경우는 show menu를 누르면 사이드 바가 뜨고 검색 메뉴가 있다. 혹은 사전을 위해서 dic.naver.com을 찾아가거나 한다.
매번 해당 블로그나 사이트에 가서 메뉴가 있는 곳 까지 찾아 가서 검색을 하는게 가끔 번거러울 때가 있다.
이를 좀더 쉽게 해보자.

safari
MacOSX의 사파리의 경우에는 예전부터 sogudi라는 플러그인이 있어서, 이미 잘 사용하고 있었다.
safari에 sogudi를 설치하면 다음과 같은 설정창에서
hanury -> http://hanury.net/wp/index.php?s=@@@
와 같이 검색할 파라미터를 @@@로 해서 검색 URL을 입력해 두면, 주소창에 URL 형태가 아닌 “hanury 검색어” 처럼 입력하면 @@@를 검색어로 치환해 주는 플러그인이다.
이를 이용해서, 영어 사전은 eng, 이미지 검색은 img 등으로 설정해서 편하게 사용해 왔다.
나에겐 MacOS 설치시 필수 항목으로 자리잡았다.
단점은 주소를 UTF-8으로 보내기 때문에 국내 사이트중 대부분이 KSC-5601_1987로만 받아서 깨지는 경우가 많다.
Naver도 그중 하나이다.
이런 와중에 OpenSearch에서 이런 부분을 xml 스키마 형태로 표준화 했고,
IE7과 FireFox가 지원하기 시작했다.

FireFox

OpenSearch에서 정의한 대로 Search Provider XML을 작성해서 searchplugins 폴더에 놔 두면 된다.
MacOSX용 FF의 경우라면 Package 내 Contents/MacOS/searchplugins/ 에 해당한다.
직접 편집하는 만큼 자유도가 높다.
재밌는건 아이콘을 넣을려면, Base64로 인코딩 된 스트링을 알아야 하는데, 내 경우에는 아이콘 파일을 나한테 보내서
메일 메시지의 [본문 원본보기] 로 알아냈다. (아마 더 낳은 방법이 있을거 같은데…. 암튼.)
또 다른 방법으로 [검색 사이트 관리...] – [추가할 검색사이트 찾기]를 눌러보면
다른 사용자들이 올려놓은 사전등의 SearchProvider 들이 등록되어 있다.
입맛에 맞게 골라 쓰면 된다.
OpenSearch 용 XML내용은 대략 다음과 같다.
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>Hanury</ShortName>
<Description>Hanury.NET Search</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/ico;base64,Qk04AgAAAAAAADY
AAAAoAAAAEAAAABAAAAABABAAAAAAAAICAAASCwAAEgsAAAAAAAAAAA
AATlpvYm9mTmLTahRvsG7RbvJu8m7RDlYOUpNeem+8c5xze284Z5FW5Vk
Wa753e284Z+tVhlVGUQRF4zwFOQ5Km3Obb/Veb1LDVa9 ...
</Image>
<Url type="text/html" method="GET" template="http://hanury.net/wp/index.php">
<Param name="s" value="{searchTerms}"/>
</Url>
<SearchForm>http://hanury.net/wp</SearchForm>
</SearchPlugin>

IE 7

Microsoft IE7 도 OpenSearch 표준에 참가해서 IE 7 부터 FF 와 같은 방식의 SearchProvider를 제공한다.
FF와 같은 표준을 구현하였기에 대략 비슷하지만 각각 차이가 있다.
- FF가 icon을 제공하는데 반해 IE는 제공하지 않는다.
- FF, IE 모두 남들(혹은 서비스 제공자)가 만들어 준 SearchProvider를 쉽게 추가할수 있다.
- 하지만 IE에 좀더 후한 점수를 주고 싶은 건 [Find more Provider] – [직접 만들기] 기능이다.
naver 사전이나, 가격 검색 등은 남들이 만들어 주겠지만, 나만을 위한 SearchProvider는 제공 받을리 만무 하다.
이럴때 FF는 내가 직접 XML을 편집해서 만들 수 있지만, xml 편집 조차 부담스러워 하는 사람들에게는 IE의 [직접 만들기] 기능은 상당히 매력적이다.
- sogudi와 비교해서는 추가 설치하지 않아도 된다는 점
- sogudi가 UTF-8만 지원하는데 반해, [직접만들기]-[여기를 클릭]을 누르면 입력 옵션이 더 늘어서 인코딩 등을 추가 설정해 줄수 있다.(국내 사이트를 위해서 중요하다.)

safari의 sogudi의 @@@ 처럼 검색어를 대문자 TEST로 해서 입력하고, 이름을 입력하고 바로 밑에 있는 [설치] 단추를 누르면 끝.
한동안 시장 점유율만 믿고, IE6에서 개발을 한동안 중단했던 거만함도, MS가 몇년전부터 노래부르던 UX를 위해 IE7을 통해, 그동안 아쉬웠던, TabBrowsing, RSS 지원, OpenSearch 등등 긍정적인 방향으로 나아가는거 같다.
본인의 경우는 각종 사전류, 회사 프로젝트에 사용하는 trac, 그리고 내 블로그 검색 용으로 개인용 SearchProvider를 만들어 사용하고 있다.
태그: firefox, ie7, mac, microsoft, safari, searchprovider, sogudi, 소개, 팁, 표준, 프로그래밍
카테고리: IT
March 13th, 2007 View Comments
Hello.java 가 있다고 하면
로 컴파일 가능하다.
jar로 묶기 위해서
manifest.mf 파일을 만들고 안에
Main-Class: Hello
라고 public static void main(String[] args)을 포함한 시작 클래스를 적어둔다.
$jar cvfm hello.jar manifest.mf Hello.class
를 실행하면 여러 파일을 묶을수도 있고, 압축도 해주며 java -jar 로 실행도 가능하다.
여기까지는 일반 jar 만들기 이고…

허접하지만 내가 만든 Xml Viewer이다. xml 파일을 끌어다 속성창에 떨어뜨리면 swing tree 보기로 보여주는데, exception 처리를 거의 하지 않아 외부 entity나, dtd를 참조하거나 하면 여지없이 exception 발생
암튼 본인 업무상 쓸일이 있어서 만들었다.
일반 macosx용 응용프로그램 처럼 보이지만 패키지 보기로 보면 jar로 묶인 자바 프로그램이란 걸 알 수 있다.
일반 macosx용 응용 프로그램 처럼 더블클릭으로 수행되며, 독에 포함 할 수도 있다.

ANT를 사용한다면 sorceforge에서 JarBundler라는 Task로 제공되어 쉽게 jar를 mac App로 만들어 주나 본데, 패키지 않에 있는 inpo.plist만 수정해주면 금망 jar로 mac App로 변신 가능
스크린 샷에서 처럼
Root-Java-
• Arguments
• ClassPath
• JVMVersion
• MainClass
이정도 값만 세팅해주면 끝.
자세한 내용은 Apple Dev 페이지에…
태그: java, mac, xml, 다운로드, 소개, 프로그래밍
카테고리: IT
January 10th, 2007 View Comments
이전글(messier 페이지에 type icon 표시 추가)을 올렸더니 allblog에서 같은 카테고리 blog article로 3n + 1 문제 코딩가 올라와서 호기심에서 perl 로 짜 보았다.
원 문제 내용http://acm.uva.es/p/v1/100.html
무지 간단해 보이는 데 타이틀 까지 건 이유가 뭔지 궁금해 호기심에서 짜 보았다.
게다가 정말 간단해 보이는데 이문제가 NP 문제라는게 더욱이 그러했다.
내가 짠 perl code는 이렇다. (짜는데야 타이핑 시간 1분여가 소요되었지만, 원 문제를 곱씹어 보면서 영어 해석하는데 좀 시간이 걸렸다. 쉽다고 댐볐지만, 내용의 깊이는 그리 간단한게 아니었다.)
use strict;
sub three_n_plus_one($){
my ($n) = @_;
print $n . " ";
exit 0 if $n == 1;
if($n % 2 == 1){
three_n_plus_one(3 * $n + 1);
}else{
three_n_plus_one( $n / 2 );
}
}
sub main(){
three_n_plus_one(22);
}
main();
문제의 특징은:
- 가정: 자연수를 주면 반드시 끝난다.
- 간단해 보이는 알고리즘에도 불구하고, 이 가정이 사실인지는 알려져있지 않다.(아직은??? 영원히…)
- 0 < n < 1,000,000사이에서는 그렇다는게 알려져 있다.
이정도???….
여러 숫자를 넣어 보니, 원 글에서 처럼,
… 5 16 8 4 2 1 로 수렴하며 끝나긴 끝났다.
참고로, 입력이 1,000,000,000,000,000였을 때
결과는
Continue reading »
태그: perl, 프로그래밍
카테고리: IT
January 10th, 2007 View Comments
메시에 페이지에 가면 메시에 DB가 있다.
테이블 보기에서는 모든 정보가 보이지만,
촬영 시기별 보기나, 촬영 장비별 보기에서는 대상이 은하인지, 성운인지 알 방법이 없어서,
모든 대상 옆에 icon을 붙였다.
각 대상은 다음과 같다.
- 행성상 성운/초신성 잔해물 :

- 성운 :

- 은하 :

- 산개 성단 :

- 구상 성단 :

- 이중성, 성군(星群), 기타 :

(icon 이미지는 천문노트에 있는 별 있는거 안에 있는 이미지를 편집해서 사용했다.
이 글을 쓰고나서 제작자의 양해를 구해야지…)
messier페이지는 서버에서 html로 렌더링 해서 뿌리기 때문에, 소스보기해도 알 방법은 없지만,
현재는 messier DB를 xml 로 저장해서
<object>
<num>M1</num>
<ngc>NGC1952</ngc>
<const>Taurus</const>
<constabbr>Tau</constabbr>
<type>Supernova Remnant</type>
<subtype>-</subtype>
<ra>05 34.5</ra>
<dec>+22 01</dec>
<mag>8.4</mag>
<diameter>6</diameter>
<distance>6.3</distance>
<desc>Crab Nebula</desc>
</object>
xslt를 여러개 만들어서 각 보기마다 실시간으로 렌더링해서 html을 생성하는 구조이다.
이를 위해서 <xsl:choose><xsl:when>을 사용했다.
아래 소스는 xslt 안에 있는 type에 대한 <xsl:template>이다.
<xsl:template match="type">
<xsl:choose>
<xsl:when test="contains(.,'Open Cluster')">
<img src="/images/deepskyicon/OpenCluster.png"/>
</xsl:when>
<xsl:when test="contains(.,'Galaxy')">
<img src="/images/deepskyicon/Galaxy.png"/>
</xsl:when>
<xsl:when test="contains(.,'Globular Cluster')">
<img src="/images/deepskyicon/GlobularCluster.png"/>
</xsl:when>
<xsl:when test="contains(.,'Nebula')">
<img src="/images/deepskyicon/DiffuseNebular.png" />
</xsl:when>
</xsl:when>
<xsl:otherwise>
<img src="/images/deepskyicon/BinaryStar.png" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
몇가지 패턴을 알수 있다.
- 거리순 보기를 보면, 은하들은 죄다 거리가 멀다는 걸 알수 있다. – 당근 나머지 대상은 우리 은하 내의 대상이니까
- 시기별 보기를 보면, 2~3월엔 거진 외부 은하들만 바글바글하고 5~6월(여름), 11~12월(겨울)엔 은하 찾기가 힘들다. – 여름 겨울철엔 은하수(즉 우리은하)가 흐르니까 우리은하내에 있는 성운, 성단들이 주로 보이는 게다.
- 밝기별 보기를 보면, 은하들은 순위가 떨어진다. (독보적인 M31을 제외하면) – 역시 은하들은 거리가 머니까…
태그: xslt, 메시에, 천체, 프로그래밍
카테고리: Astronomy, IT
August 30th, 2006 View Comments
Unix스타일의 프로그램 파라미터 처리를 해주는 모듈이 Getopt인데
자주 사용하다 보니 codesnipet으로 사용하려고, 내가 사용하는 템플릿을 여기에 등록해 둔다.
main::HELP_MESSAGE(), main::VERSION_MESSAGE() 를 구현해 두면 – -help, – -version 옵션에 반응하고, getopts(c:hv)에 사용할 옵션들을 나열하면 된다.
위 예에서 c뒤에 : 의 의미는 파라미터를 받는 다는 의미이다.
입력된 파라미터는 $Getopt::Std::opt_c로 사용할 수 있다.
#!/usr/bin/perl
use strict;
use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
sub main::VERSION_MESSAGE(){
print "$0 Version 0.5 hyeonkwen@gmail.com";
}
sub main::HELP_MESSAGE(){
print <<END;
Description of this program.
Usage: $0 OPTION DIRECTORY
OPTION
-c description of c option
-h view help message
-v view version information
END
}
sub main(){
if(!getopts("c:hv") || $Getopt::Std::opt_h){
main::HELP_MESSAGE();
exit;
}elsif($Getopt::Std::opt_v){
main::VERSION_MESSAGE();
exit;
}
}
main();
태그: codesnipet, perl, 프로그래밍
카테고리: IT
July 3rd, 2006 View Comments

- 현재 한반도 구름 사진
예전에 만들었던 한반도 구름사진 페이지 http://hanury.net/wp/astro/claud/ 가 호스팅 시작후에 서버 설정에 의해 안돌아 가고 말았다.
호스팅을 맏긴 cafe24에서 php 5를 지원 안해서
•php4에서 stream_get_contents()가 지원이 안되고,
•sensitive URL Open을 막아서 인데, 어쩔수 없이
$fp = fopen($url, 'r');
$str = stream_get_contents($fp);
위에 2줄로 끝나던 코드를
my_stream_get_contents란 함수를 추가해주고(php4에서 없으므로)
fopen만으로 열던 것을 socket을 이용해서 열도록 수정해야만 했다…
function my_stream_get_contents($fp){
$buf = "";
while(!feof($fp)){
$buf .= fread($fp,1024*8);
}
return($buf);
}
$fp = fsockopen($host, 80, $errno, $errstr, 12);
fputs($fp, "GET $url HTTP/1.0\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: http://$host\r\n");
fputs($fp, "User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT5.1)\r\n\r\n");
$str = my_stream_get_contents($fp);
아! 점점 코드 지저분해 진다.
태그: php, 프로그래밍
카테고리: Astronomy, IT
June 30th, 2006 View Comments

디카 리뷰 사이트로 유명한 dpReview의 RSS Viewer 위젯을 손봐서,
Hanury.NET 전용 위젯을 만들었다.
주의: 매킨토시 대시보드 전용이므로, 다른 오에스 사람은 받아가지 마세요!!!
근데 내 블로그를 맥으로 접속해서 다운로드 받은 사람이 과연 몇명이나 될까???
참고로 앞면은 RSS를 짧은 텍스트로 보여주고, 뒷면은 카테고리를 선택해, 글을 필터링해서 볼수 있다.
태그: mac, widget, 다운로드, 프로그래밍
카테고리: Hanury, IT
June 26th, 2006 View Comments

그림과 같이 하늘이가 태어난 지 몇일 지났는지 블로그 헤더에 붙였다.
echo(time()-date("U",mktime(date("H"),date("i"),date("s"),2,21,2006)))/60/60/24+1;
다소 지저분해 보이긴 하지만, 헤더에 그냥 붙일꺼라서…
끝에 +1 한 이유는 우리나라에서는 태어난날을 1일로 친다고해서, +1일 해줌.
태그: php, 프로그래밍
카테고리: Hanury, IT
June 23rd, 2006 View Comments
Gnome에서 배포하는 Vera라는 폰트이다.(zeph님 사이트에서 봄)
Bitstream-vera라고 적혀 있는거 봐서는 일찌기 부터 unicode 폰트를 개발해 왔던 BitStream사의 폰트인가 보지?
확인은 안해봤다.
0과O의 구분이나 1, I, |의 구분이 명확히 두드러져 개발자 폰트라 하나 보다.
bold, italic등 다양한 폰트셋으로 구성되어 있고, 무엇보다도, 폰트는 공짜란 인식이 많은 한국에서 별 의미 없는 일이지만, 공개 폰트라 맘 놓고 써도 되는 폰트이다.
기존에 Mac에서 제공하는 기본 고정폭 폰트인 Monaco와 비교 사진을 올린다.
근데, 원래 Monaco도 훌륭했던 지라, 크게 나아진점은 모르겠고,
Monaco에 비해 높이가 작아, 더 많은 줄을 표시할수 있는게 가장 두드러진 장점인듯….
기존의 모나코 폰트

새로 설치한 베라 폰트

Bitstream Vera Sans Mono 다운받기 : http://www.gnome.org/fonts/
태그: 소개, 폰트, 프로그래밍
카테고리: IT
June 22nd, 2006 View Comments

장마라, 별 볼일 없지만, 날씨 좋은날 주말이 다가오면 자주 찾아가는 곳 중의 하나가 기상청 위성 사진 페이지이다.
그래서 기상청에서 현재 위성 이미지를 가져와서 보여주는 페이지를 astro 메뉴 밑에 작성하려고 짜 보았다.
php에서 httprequest 같은거 없나 하고 한참을 찾았는데, 그냥 파일처럼 처리하면 되네…
역시 모르면 고생…
$url = 'http://www.kma.go.kr/kor/weather/picture/picture_01.jsp';
$base_url = 'http://www.kma.go.kr';
$fp = fopen($url, 'r');
$str = stream_get_contents($fp);
if ( ereg ( "(/kma_sat/DATA/MTSAT/GPL/wli[0-9]+\.gif)" , $str, $reg)){
echo "< img src='http://www.kma.go.kr$reg[0]' / >";
}else{
echo "fail to get image";
}
xml로 제공해주면 좋으련만….
태그: php, 프로그래밍
카테고리: Astronomy, IT