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)

블로그 »
Spring Framework 설정에 대하여 고민하던 중 찾았던 자료입니다.
www.habuma.com/spring/springcleaning.pdf
사용자 삽입 이미지






설정 최적화을 위한 3가지 접근 방법에 대하여 소개하고 있습니다.
 - Smarter XML (XML 설정 최소화 하기)
 - Annotations
 - Scripting

결론으로는
 - 모든 것을 Wire 하려고 하지 말라
 - XML과 어노테이션을 적절하게 사용하라 (하나의 방법으로 모든 것을 해결하려 하지 말라)
 - XML 파일을 어플리케이션 레이어 혹은 기능 별로 잘 분리하라.
 - ProeprtyPlaceHolder를 잘 활용하라

크리에이티브 커먼즈 라이센스
Creative Commons License
Writer profile
그래도 꿈이 있어서 행복하다^^
2008/04/08 16:45 2008/04/08 16:45

(go to top)

블로그 »
Spring Security 소개 자료에 있는 그림을 캡처하여 올립니다.
http://www.habuma.com/spring/SpringMVCandSecurity.pdf

사용자 삽입 이미지






사용자 삽입 이미지






























크리에이티브 커먼즈 라이센스
Creative Commons License
Writer profile
그래도 꿈이 있어서 행복하다^^
2008/04/08 15:23 2008/04/08 15:23

(go to top)

블로그 »
충격적이네요!  마음 단단히 먹고 보삼^^
http://www.infoq.com/news/2008/04/micro ··· purchase
크리에이티브 커먼즈 라이센스
Creative Commons License
Writer profile
그래도 꿈이 있어서 행복하다^^
2008/04/01 23:34 2008/04/01 23:34

(go to top)

블로그 »
먼저 acegi에서 제공하는 sample을 보자

(보기)

위의 value를 보면 권한을 지정해야하는 특정 page 중 가장 먼저 로딩 되는 페이지 부터 권한이 지정되어 있다. 가장 마지막에는 특정페이지를 제외한 나머지 page (/**=ROLE_USER)에 대한 권한 지정이 되어 있다.
(중요) 파일명뒤에는 별표가 하나(ex. acegilogin.jsp*) ,폴더의 모든 하위 디렉토리에 권한을 지정하고 싶을때는 별표 두개(/**)를 지정해줘야한다.
이는 acegi에서 권한을 읽을 때 순서를 타기 때문이다.
그러므로 가장 앞에 url 권한은 role_anonymous가 볼 수 있는 가장 노출이 심한 page를 지정해야 한다.예를 들어, login.jsp, 회원가입.jsp, popup.jsp 등등....
만약 이런 페이지들의 role이 지정되지 않는 상태에서, 이 페이지들이 포함된 폴더 전체에 대해 role_anonymous가 아닌 권한이 지정됐다면, 로그인 이전 상태에서 접근이 허용되지 않을 수 있다.
그러므로 특정 페이지에 권한을 걸때는 role_anonymous에게 허락된 페이지라도 url 권한을 명시해줘야한다

(db에 url 권한 지정해 줄때)
secureUrlDao bean에 있는 secureUrlQuery 에 orderby 쿼리를 추가하여 role_anonymous를 가장 위에 조회되도록한다.
크리에이티브 커먼즈 라이센스
Creative Commons License
Writer profile
author image
(by 고경철)
I`m slow-starter!
2008/01/23 08:44 2008/01/23 08:44

(go to top)

블로그 »
올해부터 스프링자격증 과정이 시작되죠 ... 간단히 스프링 자격증에 대해 소개해보겠습니다.

자격증 정식명칭 : SpringSource Framework Professional
첫시험 : 2008년 1월 31일
선수과정 : CoreSpring 4일과정
시험비용: 150달러(125유로) (첫시험은 공짜!)
자격증 정보: http://www.springsource.com/web/guest/certification

대충 핵심은 이거구요... 미국 혹은 유럽에서 있는 CoreSpring 과정을 들어야된다더군요
등록은 http://www.pearsonvue.com/SpringSource 에서 하는데 아직 홈피오픈을 안한것 같군요...

시험 시간은 90분정도 걸리구요, 보기중 여러개를 선택하는 객관식문제가 출제될 것입니다.

아직 첫시험도 시작되지 않아서인지 자료가 부족하군요. 왠만하면 이메일이나 전화로 문의하라구 그러구...--;
첫 시험이 끝나면 정보가 많아지겠죠?

올해 스프링자격증 함 따보시죠!


크리에이티브 커먼즈 라이센스
Creative Commons License
Writer profile
author image
(by 고경철)
I`m slow-starter!
2008/01/08 18:06 2008/01/08 18:06

(go to top)