timeout = 1; if ($request->send()){ $rst = $request->responseText; } // $rst = html_entity_decode($rst); $rst = uft8html2utf8($rst); $xmls = new XMLStruct(); $xmls->open($rst); if($xmls->doesExist('/rss/channel/title')) { $title=$xmls->getValue('/rss/channel/title'); } if($xmls->doesExist('/rss/channel/link')) { $link=$xmls->getValue('/rss/channel/link'); } $rankicon = ($data['icon_use']=='T')?" style=\"margin:4px 0px 0px 0px;padding:0px;list-style:none;margin-left:1px;\"":""; list($me2dayer, $temp) = split('님의 ', $title); $me2day .= $data['md_header']."\n"; $me2day .= "\n"; $me2day .= $data['md_footer']; } return $me2day; } function Me2DayConfig_ko($plugin) { global $service; $manifest = ''; $manifest .= ''.CRLF; $manifest .= ''.CRLF; $manifest .= ' '.CRLF; $manifest .= '
'.CRLF; $manifest .= ' '; $manifest .= ' '.CRLF; $manifest .= ' http://me2day.net/doa라면 doa를 입력하면 됩니다. 하나 이상의 주소를 입력하려면 주소와 주소를 쉼표로 구분(예: doa,taemy)하면 됩니다. 주소와 주소 사이에는 공백이 있어서는 안됩니다.'.CRLF; $manifest .= ' ]]>'.CRLF; $manifest .= ' '.CRLF; $manifest .= ' '.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'.CRLF; $manifest .= ' '; $manifest .= ' '; $manifest .= ' '.CRLF; $manifest .= ' 글의 수에는 목록에 표시할 글의 수를 지정하고 글자 수에는 글 하나당 표시할 글자 수를 입력합니다.'.CRLF; $manifest .= ' ]]>'.CRLF; $manifest .= ' '.CRLF; $manifest .= ' '.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'.CRLF; $manifest .= ' '; $manifest .= ' 사용'.CRLF; $manifest .= ' 사용 안 함'.CRLF; $manifest .= ' '.CRLF; $manifest .= ' '.CRLF; $manifest .= ' '.CRLF; $manifest .= ' '.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'.CRLF; $manifest .= ' '; $manifest .= ' 날짜'.CRLF; $manifest .= ' 시간'.CRLF; $manifest .= ' '.CRLF; $manifest .= ' 날짜 - 글 제목(시간)입니다.'.CRLF; $manifest .= ' ]]>'.CRLF; $manifest .= ' '.CRLF; $manifest .= ' '.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'.CRLF; $manifest .= ' 미투데이]]>'.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'.CRLF; $manifest .= ' ]]>'.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'.CRLF; $manifest .= ' '; $manifest .= ' 사용'.CRLF; $manifest .= ' 사용 안 함'.CRLF; $manifest .= ' '.CRLF; $manifest .= ' 사용을 선택합니다. 치환자를 사용할 사람은 사이드바를 사용 안 함으로 설정하고 치환자를 스킨 파일의 원하는 위치에 삽입하면 됩니다.

이 플러그인에 대한 더 자세한 정보는 미투와 블로그를 하나로, 태터툴즈 미투데이 플러그인을 읽어보기 바랍니다.'.CRLF; $manifest .= ' ]]>'.CRLF; $manifest .= ' '.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'.CRLF; $manifest .= '
'; return $manifest; } ?> #dhtmltooltip{ position: absolute; border: 1px solid #ccc; padding: 0px 5px; visibility: hidden; z-index: 100; color : #000; font-size: 11px; text-align: left; } #tooltip_ul{ list-style-type:none; margin: 0px !important; padding : 0 !important; } #tooltip_ul li{ margin: 4px !important; padding: 0px 0px 2px 18px !important; line-height: 16px !important; } #tooltip_date{ font-size: 12px; color : #000060; font-weight: bold; background : url(".$pluginURL."/date-plain.png) no-repeat 0px 50% !important; border-bottom-width: 1px !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: solid !important; border-left-style: none !important; border-bottom-color: #EEE !important; } #tooltip_post{ background : url(".$pluginURL."/doc-option-edit.png) no-repeat 0px 50% !important; border : none !important; } #tooltip_guest{ background : url(".$pluginURL."/user-plain-blue_mod.png) no-repeat 0px 50% !important; border : none !important; } #draco_counter { margin: 0px !important; padding: 0px !important;"; $target .= " font-family: Tahoma; font-size: 9px;"; if(isset($xy_color)) {$target .="color : ".$xy_color.";";} $target .=" } #draco_counter_y p{ display: block !important; margin: 0px !important; line-height: 12px !important; } #draco_counter_x p{ display: inline !important; margin: 0px !important; line-height: 12px !important; padding: 0px !important; } #draco_counter_y{ width: 30px; height: 100px; text-align: right; } #draco_counter_y_mid{ padding: 34px 0px 46px 0px; } #draco_counter_x { width : ".($graph_width)."px; height: 12px; margin: 0px !important; padding: 0px !important; } #draco_counter_x1{ float: left !important; text-align: left; } #draco_counter_x2{ float: right !important; text-align: right; }
"; $target .= ""; #그래프 왼쪽 Y축 if($disp_y=='true'){ $target .=""; } $target .= ""; #그래프 하단 X축 if($disp_x=='true'){ $target .=""; if($disp_y=='true') $target .=""; $target .=""; } $target .= "

$max_data[visits]

"; if($cut_peak == 'true') $target .= $avg; else $target .= round($max_data[visits]/2); $target .="

"; $chd = ""; $map_x = 0; $map_x_next = $map_x + intval($graph_barwidth/2); $loopcount = 0; #그래프 그리기 반복 부분 while($dcount_data=mysql_fetch_array($dcount_result)) { # 그래프 크기 계산 $dcount_data[visits]=stripslashes($dcount_data[visits]); $graph_high = round($dcount_data[visits] / $graph_max *95); if($graph_high>95) $graph_high = 95; else if($graph_high<0) $graph_high = 0; if($chd!="") $chd .= ","; $chd .= $graph_high.".0"; # 날짜 데이터 년월일로 쪼개기 $y = intval($dcount_data[date]/10000); $m = intval(($dcount_data[date]%10000)/100); $d = $dcount_data[date]%100; # 날짜 데이터 mktime $day_post1_time = mktime(0, 0, 0, $m, $d, $y); $day_post2_time = $day_post1_time + 86400; # 해당 날짜에 몇개의 글을 썼나 찾기 $day_post_query = "SELECT id FROM `".$database['prefix']."Entries` WHERE `published` >= $day_post1_time AND `published` < $day_post2_time AND `".$blogid_col."` = $owner AND `visibility` >= 2 AND `category` > 0"; $day_post_data = mysql_query($day_post_query) or die("쿼리 실패6 : " . mysql_error()); $day_post = mysql_num_rows($day_post_data); # 툴팁 창 만들기 $dcount_day = "
  • ".$y."년 ".$m."월 ".$d."일
  • 포스팅 "; if($day_post) $dcount_day .= ": ".$day_post."개"; else $dcount_day .= "없음"; $dcount_day .= "
  • 방문자 : ".$dcount_data[visits]."명
"; #이미지 맵 만들기 if($day_post){ $target .= ""; } else { $target .= ""; } $map_x = $map_x_next+1; $map_x_next = $map_x -1 + $graph_barwidth; $loopcount ++; $lastvisit = $dcount_data[visits]; } #구글 api 이미지 주소 만들기 $chart_img = "http://chart.apis.google.com/chart?chs=".$graph_width."x100&chd=t:".$chd."&cht=lc&chco=".str_replace("#","",$graph_color)."&chf=bg,s,".str_replace("#","",$graph_backcolor); if($view_grid=='true') $chart_img .="&chg=".(100/$how_day*7).",50"; if($line_blank=='true') $chart_img .= "&chls=".$line_thickness.",".($line_thickness*2).",".$line_thickness; else $chart_img .= "&chls=".$line_thickness.",".($line_thickness*2).",0"; if($graph_fillcolor) $chart_img .="&chm=B,".str_replace("#","",$graph_fillcolor).",0,0,0"; if($view_marker=='true'){ if(!$graph_fillcolor) $chart_img .="&chm="; else $chart_img .="|"; $chart_img .="c,6C57E2,0,$high_diff.0,10.0|x,E25757,0,$low_diff.0,10.0"; } if($graph_fillcolor || $view_marker=='true') $chart_overimg = $chart_img."|"; else $chart_overimg = $chart_img."&chm="; $target .= "
"; $target .= "

-$how_day days

today : $lastvisit

"; #------------------------------------------------------------------------------------------ return $target; } ?> JCF TEAM BLOG

JCF TEAM BLOG

관리자 글쓰기
블로그 »
블로그 »

Springframework의 annotation 기능은 개발자의 입장에서 참 편리한 기능임은 확실한 듯 합니다.
특히, annotation의 편리성을 느낀 것은 SpringMVC의 @Controller 하나로
불편했던 controller 상속, bean 등록, parameter 등록 등의 과정을 깔끔하게 처리해주더군요.

이 annotation은 (eclipse 기준) project의 java compilier 속성이 5.0이상에서는
아무 문제 없이 컴파일되고 작동되지만,
1.4 이하에서는 컴파일되지 않습니다.

컴파일러 1.4버전에서 annotation을 쓸 수 있는 방법으로 제시되고 있는 것이
commons attributes를 적용하는 것입니다.
SpringFramework reference나, commons attributes 사이트에 적용방법이 나와 있습니다.

결론부터 말씀드리면, 접었습니다. [ ...................... ]
세가지 정도의 이유를 말씀드릴 수 있을 것 같습니다.

먼저, eclipse에서 가장 즐겨 사용하는 ctrl+space를 통한 auto completion 기능을 사용할 수 없었습니다.
commons attributes를 적용하여 사용하는 annotation의 형태는 다음과 같은 주석 형태입니다.
/**
 * @@AnnotationName
 */
javadoc에서 지원하는 주석이 아닌지라, ctrl+space를 아무리 눌러봐도 annotation을 찾을 리 만무하지요.
또한, annotation class 명을 패키지까지 모두 적어주던지
클래스를 따로 import 시켜주던지 해야 하는 번거로움이 있습니다.

두번째로, 접어버렸던 가장 강력한 이유는 annotation으로 지정할 수 있는 형태가
class의 constructor 형태이어야 한다는 점이었습니다.
springframework에서 사용하는 annotation은 주로 interface형태의 annotation이 많습니다.
하지만 commons attributes에서는 counstructor 형태라 적용하기가 쉽지 않았습니다.
springframework의 내부를 뜯어보지 않는 한 interface를 적절하게 구현한 class를 찾기는
어려울 듯 싶습니다.

세번째로, commons attributes의 컴파일은 eclipse에서 자동으로 적용되지 않습니다.
ant build 또는 maven build 두가지를 지원합니다.
ant build로 컴파일하기위해 build.xml을 만들어서, eclipse에서 ant build를 자동으로 실행하도록 하였습니다.
여기서, ant build script에 대한 지식이 부족한 저로서는 만들기가 녹록치 않았고 *-_-* ,
수동 빌드가 번거로워 파일이 변경될때마다 빌드하도록 자동 빌드를 적용했더니
eclipse의 메모리가 부족하다고 한바탕 난리를 쳤더랬습니다.


적용해보려고 하는동안 생각한건,
commons attributes는 개발자가 직접 만드는 attributes를 위한 도구라는 것입니다.
springframework의 annotation을 컴파일러 1.4버전에서 쓰려고 하는 것은
우리가 제공하는 프레임워크를 사용하는 개발자에게는 안쓰는 것만 못할 것 같습니다.
그냥 컴파일러 5.0 이상 쓰시면 안될까요 ㅠ [ ..... ]

글을 적다보니 commons attributes는
annotation의 형태를 흉내낸 것이지, annotation은 아니라는 생각이 들었습니다.

뭐 동작은 되지 않았지만, 또 새로운걸 하나 배웠습니다.
얕은 지식인지라 사실과 다른 부분이 있을 수도 있으니 잘 지적해주시고,
혹시나 springframework의 annotation을 컴파일러 1.4에서도
컴파일하여 편하게 쓸 수 있는 방법이 있으면 알려주십시오.

@ 참고로 ant build를 통해 commons attributes가 컴파일 되는 과정은 간략하게 다음과 같습니다.
1. commons attributes를 통해 원래의 java 소스 코드에 있는 주석부분에 대한 java 소스 코드를 새로 생성합니다.
2. 원래의 java 소스 코드와 새로 생성된 attributes 관련 java 소스 코드를 함께 컴파일 하여
    class 파일을 생성합니다.

_ 비도 안오고 햇빛도 따갑더군요.
  자외선 조심하세요~ㅋㅋㅋ ;D

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/06/26 13:39 2008/06/26 13:39

(go to top)