January 10th, 2007 4 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, Computer
August 30th, 2006 No 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, 프로그래밍
카테고리: Computer
July 3rd, 2006 1 Comment »

- 현재 한반도 구름 사진
예전에 만들었던 한반도 구름사진 페이지 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, Computer
June 30th, 2006 No Comments »

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

그림과 같이 하늘이가 태어난 지 몇일 지났는지 블로그 헤더에 붙였다.
echo(time()-date("U",mktime(date("H"),date("i"),date("s"),2,21,2006)))/60/60/24+1;
다소 지저분해 보이긴 하지만, 헤더에 그냥 붙일꺼라서…
끝에 +1 한 이유는 우리나라에서는 태어난날을 1일로 친다고해서, +1일 해줌.
태그: php, 프로그래밍
카테고리: Computer, Hanury
June 23rd, 2006 3 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/
태그: 소개, 폰트, 프로그래밍
카테고리: Computer
June 22nd, 2006 3 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, Computer
June 22nd, 2006 7 Comments »
이전 글에 이어서 계속….
바로 밑에 Ajax가 어쩌구 XMLHttpRequest가 저쩌구 했는데,
브라우저간 약간 씩 서로 다른 동작이나, IE인 경우엔 ActiveX 경고창이 뜨고해서,
서버에서 렌더링 해서 내리기로 변경….
코드도 의외로 간단.
$xml = new DomDocument;
$xml->load("http://www.jwz.org/cheesegrater/RSS/apod.rss");
$xsl = new DomDocument;
$xsl->load("apod.xsl");
$proc = new xsltprocessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
apod.rss와 apod.xsl을 읽어와서
apos.rss를 apod.xsl을 이용해서 렌더링 해서 그냥 화면에 뿌려줌. 끝
apod.xsl파일
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/rss/channel">
<xsl:value-of select="pubDate"/> by NASA
<xsl:value-of select="item/description"
disable-output-escaping = "yes" />
</xsl:template>
</xsl:stylesheet>
/rss/item/description의 내용이 escape처리된 html 소스인데, 그냥 처리하면 화면에 html 소스가 출력된다.
value-of의 disable-output-escaping 속성 “yes”로 해주어야 한다.(이거 몰라서 한참을 찾았음)
태그: apod, php, xmlhttprequest, xslt, 프로그래밍
카테고리: Astronomy, Computer
June 21st, 2006 2 Comments »
요즘 Web2.0이니, Ajax니 무척이나 시끄럽다.
MS에 있었을 때 부터 MsXml은 워낙이나 친숙했던 터라, 그리 새삼스럽지 않았지만,
최근 구글에서 선보이고 있는 새로운 User Experience들(ActiveX 없이도 충분히 interactive하게 만들어 낸 구글맵이나 Gmail)을 보자면, MS는 같은 걸 가지고도 참 본 가치를 못 이용한다는 걸 느낀다.
(게다가 XmlHttpRequest는 MS가 얼마나 일찍부터 표준화 하고, 선도하고, 마케팅에도 얼마나 읅어 먹었던가? - 앞으로 다 이렇게 개발해야 한다고…)
정작 주인은 따로 있나 보다.
잡소리 그만하고,
오늘 문득 NASA가 제공하는 Astronomy Picture of the Day(오늘의 천체 사진) 페이지를 붙이고 싶었다.
운 좋게도 누군가가 RSS로 제공하는 것도 알았다. 이를 이용하면
XmlHttpRequest로 apod.rss를 가져와서, DOM 객체 돌아댕기며, 필요한 Element만 끄집어 내서 페이지를 완성...
var isIE = false;
var req;
function loadXMLDoc(url) {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
} else if (window.ActiveXObject) {
isIE = true;
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send();
}
}
}
function processReqChange() {
if (req.readyState == 4) {
if (req.status == 200) {
} else {
alert("There was a problem retrieving the XML data:\n" +
req.statusText);
}
}
}
이 소스는 developer.apple.com에서 참조했고,
예전엔 당연히 new ActiveXObject(”Microsoft.XMLHTTP”);
만 사용했는데, 어느덧, Safari나, Firefox가 XmlHttpRequest 객체를 내장하게 되었고, 요즘 탈 Active X 분위기 이므로(IE 7.0에서는 MS도 XMLHttpRequest를 내장 할 계획이라니), MSXML만 고려한 코딩은 피해야 겠다.
req.onreadystatechange = processReqChange;
에서 XMLHttpRequest의 onreadystatechange 상태 시 Callback 함수로 processReqChange 함수가 비 동기적으로 처리하게 하는 부분이 보이니, <- 이게 맨 첨부터 요란히 말했던 아약스의 실체 아님감.
아약스가 뭔지 아직까지 정확한 정의는 모르지만
그까이꺼 대충 client단에서 XMLHttpRequest로 비동기 적으로 서버랑 통신 하면서 사용자에게 좀더 interactive한 환경을 제공하믄 아약스 아닌가???
결국은 포기했다…
일단 IE에서는 SP2이후에 살벌해진 보안 분위기에 ActiveX 경고창이 뜨고, OS에 따라 브라우저에 따라 각기 다른 결과를 보여서
서버에서 처리하기로 했다.
클라이언트 CPU좀 슬쩍 사용해 보려고 했는데….
이어서….
태그: ajax, apod, javascript, xmlhttprequest, 프로그래밍
카테고리: Astronomy, Computer
June 20th, 2006 1 Comment »
Perl에서 array는
my @array = (1,2,3,4,5,6);
과 같이 정의하고 @를 앞에 붙여준다.
반면 hash는
my %capitals= ('china' => 'beijing', 'england' => 'london', 'france' => 'paris');
과 같이 정의하고 %를 붙여준다.
그리고 사용법은
my $a = $capitals{'china'};
$key로 $value 값을 읽어오는 문법이니, 영락없이 Java의 Hash Class같은 놈으로 생각하고 만 있었다…..
(array of ($key -> $val )) : 즉 각각의 $val을 refer하는 $key의 array
하지만 오늘 회사에서 perl로 hash를 함수의 인자로 넘기는데, 안넘어 가는 것이었다.
sub getHash(%){
my %hash = %_;
while ( my ($key, $val) = each (%hash)){}
}
가 안되는 것이다.
책을 뒤져봤는데도 없었다.
왜일까???
정답은 모든 Array와 Hash를 출력하는 두개의 함수를 보면 알수 있다.
use strict;
sub printHash(@){
my %h = @_;
while ( my ($key, $val) = each (%h))
{
print $key, " => ", $val, "\n";
}
}
sub printArray(@){
my @a = @_;
print join("\n" , @a);
print "\n";
}
그랬다. Perl에서 Hash는 Arrary 그 자체였다.
my %capitals= ('china' => 'beijing', 'england' => 'london', 'france' => 'paris');
my @capitals= ('china' , 'beijing' , 'england' , 'london' , 'france' , 'paris');
즉 둘중 아무렇게나 선언한뒤
%capitals라 선언하고 @captitals처럼 사용해도 되고,
반대로 @captitals로 선언하고, 이후에 %capitals처럼 써도 된다.
하지만 후자처럼 사용할 경우, 홀수개의 인자를 가진 array를 hash처럼 사용했을때 어떤 sideeffect 가 있는지 알수 없음.
Perl하는 사람중에서 나만 몰랐던 내용인가???
넘 당연한 거였나???
암튼 재미난거 하나 알았다.
태그: perl, 프로그래밍
카테고리: Computer