flash 대체 컨텐츠 처리하기.

브라우져 또는 기기에 따라서 플래쉬가 실행되지 않을때가 있다.
이때, 플래쉬를 대체할만한 컨텐츠를 추가해주면, 접근성이 향상이 된다.

아래 flash를 삽입해주는 스크립트를 참고한다.
function embedFlash(id, url, width, height, altText, flashVars, wmode) {
	if (!flashVars) flashVars = '';
	if (!wmode) wmode = 'window';
	if (!altText) altText = '';

	var str = '' +
	'<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" width="' + width + '" height="' + height + '" id="' + id + '">' +
		'<param name="movie" value="' + url + '" />' +
		'<param name="wmode" value="' + wmode + '" />' +
		'<param name="FlashVars" value="' + flashVars + '" />' +
		'<!--[if !IE]>-->' +
		'<object type="application/x-shockwave-flash" data="' + url + '" width="' + width + '" height="' + height + '" name="' + id + '">' +
			'<param name="wmode" value="' + wmode + '" />' +
			'<param name="FlashVars" value="' + flashVars + '" />' +
		'<!--<![endif]-->' +
			'<div class="alt-content alt-' + id + '">' + altText + '</div>' +
		'<!--[if !IE]>-->' +
		'</object>' +
		'<!--<![endif]-->' +
	'</object>';
	document.write(str); 
} 

아래 블로그주소에서 더 자세한 설명과 여러가 대체방법에 대해서 설명이 되어 있다.
http://blog.wystan.net/2008/03/25/flash-alternative-content-and-noscript 

json 이란?

발췌 원문 : http://pjm0000.egloos.com/3605520

JSON 기초
 
JSON으로는 JavaScript 객체로 표현된 데이터를 한 함수에서 다른 함수로, 또는 비동기식 애플리케이션의 경우, 웹 클라이언트에서 서버 측 프로그램으로 쉽게 전달할 수 있는 스트링으로 변형할 수 있다. 문자열이 약간 이상해 보이지만 JavaScript에 의해 쉽게 인터프리팅 되고, JSON은 name/value 쌍 보다 복잡한 구조도 표현한다. 예를 들어, 단순한 키와 값 리스트 대신, 배열과 복합 객체들을 나타낼 수 있다.
 
 
1. JSON 예제
 
JSON에서는 name/value 쌍이 다음과 같이 표현된다.
 
이는 매우 기본적인 것이고, 텍스트의 name/value 쌍 보다는 더 많은 공간을 차지한다.
 
하지만, JSON은 여러 name/value 쌍들을 하나로 연결할 때 진가를 발휘한다. 우선, 다음과 같이, 여러 name/value 쌍으로 데이터 레코드를 생성할 수 있다.

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }

신택스의 관점에서 보면 name/value 쌍 보다 나은 점이 없어 보이지만, 이 경우, JSON은 훨씬 더 사용하기 쉬우며, 가독성도 놀랍다. 예를 들어, 위 세 개의 값들은 같은 레코드의 일부이다. 중괄호는 그 값이 같은 커넥션을 갖고 있다는 것을 표시하고 있다.
 
2. 값들의 배열
 
값을 나타내야 할 때, JSON은 보다 읽기 쉽고, 덜 장황하다. 예를 들어, 인명부가 있다고 해보자. XML에서는, 수 많은 오프닝/클로징 태그에 둘러싸이게 되고, 전형적인 name/value 쌍을 사용한다면, 독점적인 데이터 포맷을 사용해야 하거나, person1-firstName처럼 키 네임을 수정해야 한다.
 
JSON에서는 다음과 같이 괄호를 사용하여 레코드를 그룹핑 할 수 있다.

{ "people": [
  { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
  { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
  { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
]}

이해하기도 어렵지 않다. 이 경우, people이라는 하나의 변수가 있고, 값은 세 개의 아이템을 포함하고 있는 배열이며, 각각의 레코드에는 이름, 성, 이메일 주소가 있다. 위 예제는 레코드들을 모두 투입하는 방법과, 아이템을 괄호가 있는 싱글 값으로 그룹핑 하는 방법을 설명하고 있다. 물론, 같은 신택스를 사용할 수 있지만, 여러 값들(각각 여러 레코드들을 갖고 있음)을 갖고 있다.

{ "programmers": [
  { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
  { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
  { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
 ],
"authors": [
  { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
  { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
 ],
"musicians": [
  { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
  { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
 ]
}

여기에서 주목해야 할 점은 각각이 다수의 값을 내포하고 있는 많은 값들을 표현할 수 있는 당신의 능력이다. 또 하나 주목해야 할 점은 레코드의 name/value 쌍들은 다른 메인 항목(programmers, authors, musicians)에 따라 변한다는 것이다. JSON은 완전히 동적이고, JSON 구조 안에서 데이터를 표현하는 방식을 바꿀 수 있다.
 
또 한 가지 알아두어야 할 것은 JSON 포맷 데이터로 작업할 때 제약 조건이 없다는 점이다. 따라서, 어떤 것을 표현하는 방식을 바꿀 수 있고, 심지어는 같은 데이터 구조 내에서 같은 것을 다른 방식으로 나타낼 수도 있다.
 
3. JavaScript에서 JSON 사용하기
 
JSON 포맷을 다룬 후라면, JavaScript에서 이것을 사용하는 것은 간단하다. JSON은 네이티브 JavaScript 포맷이고, JavaScript 내에서 JSON 데이터와 작업하기 위해 특별한 API나 툴킷이 필요 없다.

4. JSON 데이터를 변수에 할당하기

예를 들어, 새로운 JavaScript 변수를 만들고, JSON 포맷 데이터 스트링을 여기에 직접 할당한다고 해보자.

var people =
  { "programmers": [
    { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
    { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
    { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
   ],
  "authors": [
    { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
    { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
    { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
   ],
  "musicians": [
    { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
    { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
   ]
  }


복잡하지 않다. people에는 이제 JSON 포맷 데이터가 포함되어 있다.
하지만, 많은 것을 수행하지 않는다. 데이터는 여전히 유용한 포맷으로 되어있지 않다.
 
5. 데이터에 액세스 하기
 
위의 매우 긴 스트링은 단순한 배열일 뿐이고, JavaScript 변수에 그 배열이 있다면 쉽게 액세스 할 수 있다. 사실, 그 배열을 마침표로 구분할 수 있다. 따라서, programmers 리스트의 첫 번째 엔트리의 성(last name)에 액세스 하려면, JavaScript에서 다음과 같은 코드를 사용해야 한다.

people.programmers[0].lastName;

인덱싱은 '0' 부터 시작한다. 따라서, 이것은 people 변수에 있는 데이터로 시작한다. 그리고 나서, programmers라고 하는 아이템으로 이동하고, 첫 번째 레코드([0])에 액세스 한다. 마지막으로, lastName 키의 값에 액세스 한다. 결과는 "McLaughlin"이라는 스트링 값이다.

다음은 같은 변수를 사용하는 예제들이다.

people.authors[1].genre   // Value is "fantasy"
people.musicians[3].lastName  // Undefined. This refers to the fourth entry, and there isn't one
people.programmers.[2].firstName // Value is "Elliotte"
 
이 신택스로도, 다양한 JSON 포맷 데이터로 작업할 수 있고, 추가 JavaScript 툴킷이나 API가 필요 없다.

6. JSON 데이터 수정하기
 
위에 나타난 점과 괄호 표기법을 사용하여 데이터에 액세스 하듯, 같은 방식으로 데이터를 쉽게 수정할 수 있다.

people.musicians[1].lastName = "Rachmaninov";

문자열에서 JavaScript 객체로 변환했다면 변수에 있는 데이터를 수정하면 된다.

7. 문자열로 변환하기
 
물론, 모든 데이터 수정은 텍스트 포맷으로 쉽게 변환할 수 없다면 가치가 없다. 이것 역시 JavaScript에서는 간단하다.

String newJSONtext = people.toJSONString();

이것이 다이다.
원하는 곳 어디에서나 사용할 수 있는 텍스트 문자열이 생겼으니, 이것을 Ajax 애플리케이션에서 요청 스트링으로 사용할 수 있다.


훨씬 더 중요한 것은, 어떤 JavaScript 객체라도 JSON 텍스트로 변환할 수 있다. 원래 JSON 포맷 스트링으로 할당된 변수로만 작업할 필요가 없다. myObject라는 객체를 변형하려면, 같은 종류의 명령어를 실행하면 된다.


String myObjectInJSON = myObject.toJSONString();


이것이 JSON과 다른 데이터 포맷과의 가장 큰 차이이자, 이 시리즈를 통해 탐구할 주제이다. JSON에서는, 단순한 함수를 호출하면, 포맷팅 되어 사용하기에 알맞은 데이터를 얻을 수 있다. 다른 데이터 포맷의 경우, 미가공 데이터와 포맷 데이터간 변환은 여러분의 몫이다. Document Object Model 같이 데이터 구조를 텍스트로 변환하는 함수를 제공하는 API를 사용할 때도, 네이티브 JavaScript 객체와 신택스 보다는, API를 배우고 그 API의 객체를 알아야 한다.
 
많은 JavaScript 객체들과 작업할 때, JSON은 데이터를 서버 측 프로그램으로 요청을 보내기에 알맞은 포맷으로 쉽게 변환할 수 있다.



트위터 특정 url에 대한 트윗횟수 가져오기

트위터 공유기능 구현하다 보면, 트윗된 횟수를 보여줘야 할때가 있다.
이때, 트위터에서 기본 제공되는 공유버튼을 이용하면 되겠지만, 내맘대로 버튼모양을 바꾸고 싶다면,  아래 url로 공유하는 url을 대입해서 호출해주면, 트윗된 횟수를 알수 있다.
호출url:
http://urls.api.twitter.com/1/urls/count.json?url=http%3A%2F%2Fwww.daara.co.kr%2Fnews%2Fnews_view2.php%3Fidx%3D138891&callback=twttr.receiveCount

결과:
twttr.receiveCount (
{
}
)

결과는 json형태로 받을수 있으니, 적절해 값을 추출해서 사용하면 가능할거 같다.(트위터가 이 url을 변경하지 않는한....^^)

다만, 트윗을 할때 실시간으로 트윗횟수를 받을 없을거다.(트위터 공유창과 원본글이 존재하는 페이지의 도메인이 다른 문제(보안문제발생)로 트윗공유후 페이지 로딩없이 트윗회수가 올라가진 않을거이다.)
 

홈페이지 모바일 접속 구분해서 이동시키기

php에서.

// 웹브라우저 user agent 체크
if( preg_match('/(iphone|samsung|lgtel|mobile|android|blackberry|symbian|sony|ipod)/i', $_SERVER['HTTP_USER_AGENT']) ) {
   //모바일이면
   session_start();
    if($_GET[v]=="PC"){
        $_SESSION["useragent"] = "PC";
    }else{
        $_SESSION["useragent"] = "";
    }
    if($_SESSION["useragent"]!="PC"){
        echo"<script>location.href='http://m.daara.co.kr';</script>";
        exit;
    }
}

javascript에서
if(/lgtelecom/.test(ua) || /android/.test(ua) || /blackberry/.test(ua) || /iphone/.test(ua) || /ipad/.test(ua) || /samsung/.test(ua) || /symbian/.test(ua) || /sony/.test(ua) || /SCH-/.test(ua) || /SPH-/.test(ua)){
//이동처리
}

위에서 처럼 페이지 상단에 넣어주고 처리를 해주면된다.

facebook share 할때 description을 잘못가져가는 경우.

요즘 소셜 공유 기능이 대세다, 
그 기능을 붙이는 것은 소셜 api와, 또 여러 블로그, 카페등 인터넷에서 많이 도움이 되는 글들을 찾아볼수 있다.
이번에 소셜공유 버튼을 붙이다 보니, facebook share를 할때, 정보를 잘못읽어가는 경우가 자주 생겨서 여기저기 찾다가 답이 된ㄴ 글을 http://akrabbestari.blogspot.com/2011/01/facebook-share-wrong-description-by.html 에서 찾았다.

facebook share에서는 기본적으로 description meta tag에서 해당 정보를 찾아보고, 해당 정보가 없을경우, 페이지내에서 최소 120자 이상의 글을 가지고 있는 첫번째 paragraph(p tag)를 찾아서 거기에 있는 내용으로 공유 텍스트를 입력해준다는것이다.
(그 p tag안에 있는 내용은 tag를 포함하지 않아야 한다.)

암튼, facebook share를 할때 정확한 정보를 facebook에서 찾아갈수 있도록 하기 위해서는
1. description meta tag를 이용하거나,
2. p tag 안에 html tag가 없는 내용을 120자 이상 넣어주면 된다.(단, 필요에 따라서는 display:none을 처리해서 감춰줘도 된다. 난 이렇게 했다.^^)

둘중 하나만 해줘도 제대로된 정보를 facebook이 읽어갈수 있다.

SSL 인증서를 도메인 별로 신청해야 하나요?


SSL인증서는 SSL서버가 돌아가는 웹사이트 주소별로 받는 것이 원칙입니다. 예를들어, www.a.com, secure.a.com 두 사이트에 SSL 서버를 설치하면 두개의 인증서를 신청해야 합니다.

그러나, 인증서의 신청은 여러분 회사의 SSL서비스 정책에 따라 달라집니다. 실제 SSL통신이 필요한 부분은 회원가입, 로그인, 정보수정, 전자상거래, 금융거래 개인정보 열람 등의 중요한 정보가 노출되는 부분이라고 할 수 있습니다.

일반적인 웹사이트 전체에 SSL 암호통신을 하다보면, 암호화된 데이터의 암호 복호화 시에 많은 서버부하를 주게 됩니다. 따라서, 일반적으로 특정 서버에 위의 중요한 데이터 통신 부분에 대한 웹서버에만 SSL통신(https)을 서비스하고, 그 이후는 일반 웹통신(http)을 하도록 하는 것이 관례적입니다.

출처 : http://www.certkorea.co.kr/cs.asp?faq_ssl

트랜잭션 복제중에 'sp_replcmds'을 실행할 수 없습니다. 라는 오류 발생할때.

트랜잭션 복제중에 'sp_replcmds'를 실행할수 없다는 오류가 발생해다. (오류 번호 : 18759)
일단 뭔 내용인지 몰라서, help를 뒤져 sp_replcmds가 뭔지 부터 확인했다.

sp_replcmds 설명 내용중에 보면,
"텍스트 포인터가 같은 트랜잭션에서 검색되지 않아 sp_replcmds가 텍스트 명령을 복제할 수 없는 경우에는 경고 메시지 18759번이 Microsoft® SQL Server™ 오류 로그 및 Microsoft Windows® 응용 프로그램 로그에 모두 추가됩니다." 라는 오류 18759에 대한 내용이 있다.

이것을 참고로 해서 텍스트 포인터를 확인해 주는 textvalid()함수를 이용해서 , 복제중에 오류를 발생시키고 있는 table의 text, ntext, image 필드에 대한 텍스트 포인터 유효성을 확인 해보았다.
일부 데이타중에 텍스트 포인터가 유효하지 않은것이 있어 해당 필드들에 대해서 초기화(update시킴)를 시켜주고,
다시 복제를 초기화를 진행해 주었다.

계속 모니터링을 해봐야 하겠지만, 현재로서는 복제가 잘되고 있다.

복제 - 복제필드중 text, ntext, varchar(max), image 등에 대한 복제 문제 해결

복제를 구성하다보면,
text, image 필드 같이 큰값을 게시 해야 하는 경우가 있는데, 이경우 insert, update, writetext 또는 updatetext작업이 구성된 제한값을 초과해서 아래와 같은 오류를 발생시키기도 한다.

해결 방법은
서버 구성 정보 중에 "max text repl size" 매개 변수를 재설정해주면된다.

1. sp_configure 로 서버 구성확인

2. "max text repl size" 수정.

EXEC sp_configure 'max text repl size', 2147483647
Go
RECONFIGURE WITH OVERRIDE
Go

터미널서버 클라이언트 액세스 라이센스 문제.

서버 셋팅후 특별한 조정이 없었다면, 서버 운영도중 터미널서버 접속시 아래와 같은 경고문구를 만나기도 한다.

"이 컴퓨터에 대해 사용 가능한 터미널 서버 클라이언트 액세스 라이센스가 없으므로 원격 연결이 끊어졌습니다."

이럴 경우,
아래와 같이 해주면, 해결된다.

관리도구 > 터미널서버 구성 > 서버설정 > 라이센스 의 값을 "사용자단위"로 변경을 해주면된다.

[웹서버 - IIS6]application pool 재시작하기

iis6에 있는 응용프로그램 관리에서도 재시작에 대한 옵션을 사용할수 있다.
그러나, 가끔씩은 그 작업이 재대로 수행되지 않아서, 어플리게이션풀이 죽어 싸이트가 죽어있는경우가 있다. 이때, 윈도우스케줄에 아래 스크립트를 이용해서 스케줄을 해주는 방법을 추가로 할수 있다.


' Start an Application Pool
strComputer = "."
Set objWMIService = GetObject _
    ("winmgmts:{authenticationLevel=pktPrivacy}\\" _
        & strComputer & "\root\microsoftiisv2")

Set colItems = objWMIService.ExecQuery _
    ("Select * From IIsApplicationPool Where Name = " & _
        "'W3SVC/AppPools/[어플리케이션풀이름]'")

wscript.echo("응용프로그램풀 재시작 - "& Now())
For Each objItem in colItems
    objItem.Stop
    objItem.Start
Next
wscript.echo("응용프로그램풀 재시작 완료 - "& Now())

mssql 스키마 속성에 걸려 있는 규칙(rule) 수정하기.

스키마 속성에 규칙(rule)을 적용한 경우가 있다. 이경우 규칙을 수정해야 하는 경우 해당 룰을 먼저 바인딩 된 속성에서 바인딩 해제를 해준후 규칙을 수정하고, 다시 바인딩 시켜주어야 한다.

먼저, 바인딩된 스카마 속성에서 바인딩 해제후
--> exec sp_unbind [tbl_good].[goodType_code]
rule 수정,
--> DROP RULE [dbo].[chkGoodType]
--> CREATE RULE [dbo].[chkGoodType]
      AS @chkGoodType in (1, 2, 3, 4, 5, 6)
재바인딩.
--> EXEC dbo.sp_bindrule @rulename=N'[dbo].[chkGoodType]', @objname=N'[dbo].tbl_good].[goodType_code]' , @futureonly='futureonly'
GO

이렇게 하면된다.

MS-SQL 복제에서 distribution cleanup이 지연될때


복제 서버를 운영하다 보면, 복제 데이타베이스 정리가 지연되어 데이타베이스 사이즈가 계속 증가하는 경우가 생긴다.

이때, 복제의 모니터의 기타에이전트 에서 "배포 정리:distribution" 이 잘 실행되고 있는지 확인을 하여 제대로 실행되지 않거나, 지연되고 있다면, 아래 처럼 수동으로 처리를 해준다.

1. msrepl_transactions, MSrepl_commands 테이블의 row수를 확인한다.

2. distribution cleanup job의 최근 실행시간을 확인해본다.

 

만약 row수가 많이 늘어나있고, job의 실행시간도 많이 지연되어 있다면

log reader agent를 일단 중지시키고 복제 트랜잭션의 max retention 시간을 줄여본다.

 

EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = ??

위 명령의 ? 부분이 보통 기본값(120??)으로 되어있을텐데 용도에 따라서 줄여본다.

나의 경우에는 처음에는 10으로 그 다음에는 2로 실행했다.

외국 뉴스그룹 같은 경우에는 0으로 하던데 그럴때는 아직 반영되지 않은 트랜잭션이

삭제될 수 있으므로 주의해야한다.

distribution cleanup job의 실행주기를 짧게(분 단위로..) 조정하고 기다리면 실행될 것이다.

 

만약 delete 작업이 오래 걸리는 것 같으면 DB의 복구모델이 simple인지 반드시 확인~!!



mssql2005에서 로그인 계정에 대한 암호만료정책 해제 하기

mssql2005 계정생성후 사용중에 암호 만료 정책에 의해서 암호를 바꾸라는 메세지가 나올때, 아래와 같이 해주면, 정책부분을 변경할수 있다.

SQL2005 MUST_CHANGE=Off 
처리하기.

ALTER LOGIN X WITH PASSWORD = 'Y' UNLOCK
(X 와 Y 는 사용하고 있는 계정과 계정패스워드 이다.)

터미널서비스 관리


터미널 서비스 관련 명령어.

동일 네트워크에 있는 다른 서버에서
1. 터미널서비스가 세션 초과로 접속 안될때.
--> tsdiscon 세션id /server:[해당서버IP(서버호스트명)]

2. 터미널서비스 사용자 및 세션ID값 확인하기
--> query user /server:[해당 서버IP]

3. 원격에서 컴퓨터 재부팅하는 명령
--> tsshutdn 1 /server:[해당서버IP주소] /reboot /v

mssql single mode 접속하기

mssql 관리자 싱글모드 접속 명령
command 창에서

==> net start mssqlserver /m

windows live mail 차이

이메일 프로그램을 천둥새(Thunderbird)로 사용하다가 최근에 windows mail 프로그램 변경을 했다.

* 천둥새 : http://www.mozilla.or.kr/ko/thunderbird/
* Windows mail for vista : http://www.microsoft.com/windows/products/windowsvista/features/details/mail.mspx

windows mail 프로그램이 vista하고 XP하고 다르다는 것을 알게 됐다.
XP에서 설치하면서는 여러 계정을 등록하면 계정별로 분류가 되고 RSS도 지원을 하는데, vista에서는 여러 계정을 등록해도 로컬폴더 하나로 관리가 되고 RSS 관리도 지원을 안한다.
XP에서 써보고 편하다 싶어서 vista에서도 사용하려고 했더마 불편하네.
조만간 update 되긴 하겠지만, 지금으로서는 아쉽네.. 쩝..

windows vista blue screen

사용자 삽입 이미지

windows vista sp1 패치 이전에 나왔던 블루스크린(blue screen)
SP1이후에는 아직 없는데... 5번정도 봤던거 같다.
윈도우즈에서 언제쯤이면 이 화면을 안 보게 될까?

windows vista sp1 upgrade

조금전에 windows vista sp1 update 했음.
전체 진행이 한시간 정도 걸린듯.
다운로드하고 설치하고 리부팅하고...
생각보다 오래 걸리네.

설치하고 체험지수를 보니 그래픽이 0.1 상승했음.
그외는 좀 더 써봐야 할듯...

간간이 블루스크린 뜨던게 이젠 안정이 됐을려나....

a 태그에서 href 없이 onclick 어트리뷰트 제대로 사용하기

http://www.serve.co.kr/tv/default.asp

동영상 플레이를 재생하는 태그가 잘못 사용되어진 부분이 있습니다.

a class="SV_point_color1 SV_pointer" onclick="javascript:playVod('','95845','95845','');"

해당 a 태그안에 href가 없다.
onclick으로 javascript 사용을 하고 있는데... 해당 javascript도 한번 보자..

function playVod(wcode, url, ser, isfree)
{
//동영상 플레이전 힛트수 업데이트처리
var url2 = "/tv/tv_count.asp";
var functionName = "";
var strParam = "ser="+ser ;
var strAsync = true;
var returnType = "";
var strDocName = "";
SERVE.Xml.xmlHttp(url2, functionName, strParam, strAsync, returnType, strDocName);

var isSuc = "Y";
if (wcode == 908) { //RTN
// ret = chk_login();
ret = true;
if (ret) {
window.open('','rtn_vod','width=420,height=420,toolbar=no,location=no,menubar=no,scrollbars=auto,resizable=no,top=100,left=100');
} else {
isSuc = "N";
}
//url = url+"&servenm=&serveid=";
document.frmVod.serveid.value = "";
document.frmVod.servenm.value = "";
document.frmVod.target="rtn_vod";
} else {
url = '/news/vod_viewer.asp?ser='+url
window.open('','media_player','width=810,height=520,scrollbars=no,resizable=no');
document.frmVod.target="media_player";
}

if (isSuc == "Y") {
document.frmVod.action = url;
document.frmVod.submit();
}
}

길긴하지만 봐야 할것은 url 파리미터 이겠다.
해당 javascript를 기준으로 a 태그를 올바르게 고쳐보면

a href="/news/vod_viewer.asp?ser=95845" class="SV_point_color1 SV_pointer" onclick="javascript:return playVod('','95845','95845','');"

이렇게 되어야 하겠고. playVod 함수에서는 return false 처리를 해주면 되겠다.

a 태그에 href 있고 없고는 기술적으로는 문제가 안 될 수 있겠으나 SEO(Search Engine Optimizing)에서 보면 많이 달라질 수 있다. 링크가 있느냐 없느냐에 따라서 구글의 pagerank를 고려한다면 노출 우선순위가 달라질 수 있는 것이고. 검색로봇들이 웹페이지를 수집해갈 수 있는 경로가 없다는 것은 해당 컨텐츠가 검색이 안될 수 있다는 것이니까.
이런 작은 태그 하나 하나도 습관이 되는게 좋겠다.

windows vista sidebar gadget 만들기 - 부동산써브 검색

부동산써브의 통합검색 서비스 사이드바 가젯을 만들어 봤다.

아래 개발 가이드 페이지를 참고했다.

http://msdn.microsoft.com/msdnmag/issues/07/08/SideBar/default.aspx?loc=ko

처음에는 RSS 위치만 바꿔서 분양정보에 대한 gadget을 만들었는데...
생각했던 내용들을 전부 적용하려면 좀 더 생각들을 하고 기능들을 추가해야 하기에 우선 간단하게 적용할 수 있는 검색 가젯을 만들어서 등록해 봤다.
음.. 조금전에 등록했는데, 아직 갤러리에서는 안 보임.
http://gallery.live.com/results.aspx?c=39&bt=1&ti=2

디자인 좀 더 해야 할듯도 하고... ㅎㅎ..

간단하게 구조를 살펴보면... 우선 파일 리스트는 아래와 같다.
- gadget.xml : gadget 요약 XML
- gadget.html : 기본 HTML
- style.css : 기본 CSS
- serve1.gif : 로고 이미지 파일
- btn_search2.gif : 검색 버튼 이미지 파일

gadget.xml 파일에 대해서는 msdn 페이지를 확인하는게 좋겠고...
gadget.html 파일이라고 해봐야 부동산써브 통합검색(http://www.serve.co.kr/search/) 페이지로 검색하기 위한 form 태그 하나만 들어가 있을 뿐이다. 크기와 위치 조절을 위해서 CSS를 약간 수정했고.. 이미지 파일이야 기본적으로 필요한것들이라서 들어가 있는 것이고.

처음에 분양쪽 RSS(http://www.serve.co.kr/rss/news_category.asp?srch_code1=29&srch_code2=152)를 적용하면서 gadget을 파악하면서는 몇시간 정도 시간이 필요했는데... 이해를 하고 나니 검색가젯을 만드는데는 몇분정도.. 뭐.. 디자인 맞추느라고 시간이 좀 더 걸리긴 했고...(분양쪽은 몇가지 수정 좀 한후에 올리려고 함..)
욕심을 부려서 네이버위젯(http://desktop.naver.com/openapi/index.nhn)도 비슷한 구조면 바로 해 보려고 했더니.. 쩝.. 네이버는 구조가 많이 다르네..
야후에는 예전에 경희가 만들었던게 있고.. http://kr.widgets.yahoo.com/gallery/gallery.html?wid=184
DAUM이 아직 개발가이드를 공개 안한거 같은데.. 흠.. 못 찾은 건가...

시간 되는데로 하나씩 만들어봐야 할텐데.. ㅎㅎ....