Search Results for '프로그래밍/프로그램 팁 관련'
255 posts related to '프로그래밍/프로그램 팁 관련'
- 2010/03/22 실시간 스팸차단리스트(RBL) 이용방법
- 2010/03/18 구글 트랜드 검색
- 2010/03/18 로딩 이미지 만들어주는 사이트
- 2010/03/18 싸이트로딩속도 + 파일별로딩속도 알려주는 사이트
- 2010/03/18 google의 java script hosting
- 2010/03/12 Google 메일서버 이용하기
- 2010/03/12 perl 싸이월드 투데이 조작 기타 조회수 조작하기 2
- 2010/03/12 웹사이트에서 쿠키값을 보고 싶을때 1
- 2010/03/10 코딩할때 편한 폰트 ^^
- 2010/03/01 ie에서 경고창 없이 창 닫기 1
- 2010/02/11 아이콘 검색 엔진(iconlet.com, iconfinder.net)
- 2010/02/11 대용량 업로드를 위한 php.ini 설정
- 2009/11/19 Eclipse - 설치 및 환경 설정 java
- 2009/09/30 웹에서 doc 파일을 프린트하기 2
- 2009/09/30 자바스크립트 에러 상태창에 표시
- 2009/09/30 한 번의 링크 클릭으로 두 개의 페이지를 여는 방법
- 2009/09/30 MSN 친구 자동으로 추가하는 스크립트 1
- 2009/09/30 메타 데이타....개념
- 2009/09/30 ShellExecute,WinExec,CreateProcess (IE 실행방법)
- 2009/09/30 웹페이지 프레임 포함 전체 소스 추출웹, HTML
- 2009/08/27 루비 1.8.7이 공개되었습니다.
- 2009/08/27 레지스트리 변경 예제
- 2009/08/27 Toolhelp32를 이용한 프로세스ID얻기
- 2009/08/26 웹조각 만드는 방법 1
- 2009/08/26 프레임을 사용하는 페이지에서 직접 페이지로 들어오는걸 막는법
- 2009/08/26 웹페이지 복사 방지 해지 하는 법 1
- 2009/08/26 태그장난
- 2009/08/26 TISTORY 첨부된 swf URL 따오기
- 2009/08/17 Ajax + MySQL 5.0 버젼에서 한글처리하기 by Python
- 2009/08/17 Eclips 파일 종류별로 ascii로 저장할건지, binary로저장 할것인지 정의
KISA-RBL 서버에서 스팸리스트를 다운로드하는 방법과
메일 서버(Sendmail, qmail, Postfix, Exchange Server)에서 참조할 수 있는 방법이 설명되어 있습니다.
첨부파일을 참고해 주세요.
출처 : kisarbl.or.kr (한국인터넷진흥원 스팸대응팀)
http://google.com/trends?q=%EC%86%90%EB%8B%B4%EB%B9%84%2C%ED%83%9C%EC%97%B0&ctab=875759130&geo=all&date=all
가끔 사이트를 열었을때 파일을 불러오기 전 로딩 중입을 알려주는 모양을 보셨을텐데요..
이사이트에 가심 편하게 로딩이미지를 만들어 쓰실수가 있어요..
저두 아직은 써보지 않았지만..
불러올 데이터가 많을때 이런 로딩 이미지가 있으면 용이하겠죠 ^^
Indicator type --> 는 로딩될때 나오는 모양들
Background color --> 로딩이미지가 사용될 곳의 바탕색깔
Foreground color --> 로딩 이미지 색깔
입니다.
선택후 아이콘을 누르면 바로 아래에 선택된 로딩이미지가 보여
집니다. ^^
이외 Top 10 로딩이미지도 있으니
사용해보세요..
http://tools.pingdom.com/fpt/?url=youngsam.kr
우측에 youngsam.kr 변경 하시면 됩니다.
Ajax Libraries
Each library is available via both google.load()
and directly, via <script/>
tag. The google.load()
approach offers the most functionality and performance. In the sections that follow, we document all of the libraries that are available. For each library we list its name (as in the name used in google.load()
), all of the versions that we have on hand for the library, etc.
- jQuery
- name: jquery
- versions: 1.2.3, 1.2.6, 1.3.0, 1.3.1
- load request:
google.load("jquery", "1.3.1");
- extras: uncompressed:true, e.g.,
google.load("jquery", "1.3.1", {uncompressed:true});
- path: http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js
- path(u): http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.js
- site: http://jquery.com/
- note: 1.2.5 and 1.2.4 are not hosted due to their short and unstable lives in the wild...
- versions: 1.2.3, 1.2.6, 1.3.0, 1.3.1
- jQuery UI
- name: jqueryui
- versions: 1.5.2, 1.5.3
- load request:
google.load("jqueryui", "1.5.3");
- extras: uncompressed:true, e.g.,
google.load("jqueryui", "1.5", {uncompressed:true});
- path: http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.min.js
- path(u): http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.js
- site: http://ui.jquery.com/
- note: This library depends on
jquery
. Before loading this module, you must loadjquery
. e.g.:google.load("jquery", "1.3.1"); google.load("jqueryui", "1.5.3");
- versions: 1.5.2, 1.5.3
- Prototype
- name: prototype
- versions: 1.6.0.2, 1.6.0.3
- load request:
google.load("prototype", "1.6.0.3");
- path: http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js
- site: http://www.prototypejs.org/
- versions: 1.6.0.2, 1.6.0.3
- script.aculo.us
- name: scriptaculous
- versions: 1.8.1, 1.8.2
- load request:
google.load("scriptaculous", "1.8.2");
- path: http://ajax.googleapis.com/ajax/libs/scriptaculous/1.8.2/scriptaculous.js
- site: http://script.aculo.us/
- note: This library depends on
Prototype
. Before loading this module, you must loadPrototype
. e.g.:google.load("prototype", "1.6"); google.load("scriptaculous", "1.8.2");
- versions: 1.8.1, 1.8.2
- MooTools
- name: mootools
- versions: 1.11, 1.2.1
- load request:
google.load("mootools", "1.2.1");
- extras: uncompressed:true, e.g.,
google.load("mootools", "1.2.1", {uncompressed:true});
- path: http://ajax.googleapis.com/ajax/libs/mootools/1.2.1/mootools-yui-compressed.js
- path(u): http://ajax.googleapis.com/ajax/libs/mootools/1.2.1/mootools.js
- site: http://mootools.net/
- versions: 1.11, 1.2.1
- Dojo
- name: dojo
- versions: 1.1.1, 1.2.0, 1.2.3
- load request:
google.load("dojo", "1.2.3");
- extras: uncompressed:true, e.g.,
google.load("dojo", "1.2.3", {uncompressed:true});
- path: http://ajax.googleapis.com/ajax/libs/dojo/1.2.3/dojo/dojo.xd.js
- path(u): http://ajax.googleapis.com/ajax/libs/dojo/1.2.3/dojo/dojo.xd.js.uncompressed.js
- site: http://dojotoolkit.org/
- versions: 1.1.1, 1.2.0, 1.2.3
- SWFObjectNew!
- name: swfobject
- versions: 2.1
- load request:
google.load("swfobject", "2.1");
- extras: uncompressed:true, e.g.,
google.load("swfobject", "2.1", {uncompressed:true});
- path: http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js
- path(u): http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject_src.js
- site: http://code.google.com/p/swfobject/
- versions: 2.1
- Yahoo! User Interface Library (YUI)New!
- name: yui
- versions: 2.6.0
- load request:
load request: google.load("yui", "2.6.0");
- extras: uncompressed:true, e.g., google.load("yui", "2.6.0", {uncompressed:true});
- path: http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/yuiloader/yuiloader-min.js
- path(u): http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/yuiloader/yuiloader.js
- site: http://developer.yahoo.com/yui/
- versions: 2.6.0
호스팅 업체에서 추천해주길래 한번 셋팅해봤는데...
나름 편하네요.
클라이언트 4분 셋팅해드렸는데...
클라이언트들도 더이상 메일서버가 말성을 안일으킨다고 감사메일까지 날려줍니다.
링크따라가셔서 가입만하면 됩니다.
링크1 : 학교, 교육단체
링크2 : 비영리기관
기업형, 학교용, 비영리단체 가 있습니다.
기업형은 가입을 안해봐서 모르겠습니다.
(학교용, 비영리단체용으로만 가입을 시켰습니다.)
MX 레코드 설정하시고 CNAME 이나 HTML 로 인증 받으시면 됩니다.
최초설정시 48시간걸리는줄 알았는데 30분정도면 인증되네요
코드값 : google4091bac42bede38c
# MX 레코드 셋팅
IN MX 10 aspmx.l.google.com.
IN MX 20 alt1.aspmx.l.google.com.
IN MX 20 alt2.aspmx.l.google.com.
IN MX 30 aspmx2.googlemail.com.
IN MX 30 aspmx3.googlemail.com.
IN MX 30 aspmx4.googlemail.com.
IN MX 30 aspmx5.googlemail.com.
webmail IN CNAME ghs.google.com
# CNAME 인증방법
# 네임서버에 추가
google4091bac42bede38c IN CNAME google.com
# HTML 인증방법
# 해당 도메인 최상위에 googlehostedservice.html 화일 생성
# 내용은 다음과 같습니다.
google4091bac42bede38c
### 추가사항 2009.06.24
코드값은 밑에 댓글처럼 구글에서 임의로 생성해 줍니다.
적은줄 알았는데 안적어놨었네요 @@
use LWP;
use HTTP::Cookies;
$header = HTTP::Headers->new;
$request = HTTP::Request -> new;
$header -> header('User-Agent' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; User-agent: Mozilla/4.0 (compatible; MSI
E 6.0; Windows NT 5.1; SV1); .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)',
'Accept-Language' => 'ko',
'UA-CPU' => 'x86',
'Accept-Encoding' => 'gzip, deflate',
'Host' => 'minihp.cyworld.com',
'Connection' => 'Keep-Alive',
'Referer' => 'http://minihp.cyworld.com/pims/main/pims_main.asp?tid=홈피아이디',
);
$url = "http://minihp.cyworld.com/pims/main/pims_main4.asp?tid=자신의홈피id&urlstr=";
$i=0;
while(1)
{
$i++;
$browser = LWP::UserAgent->new();//브라우져 생성
$browser -> cookie_jar({}); //쿠키 저장
$response = $browser->get($url); //브라우져에 요청
print $response -> as_string; //헤더 및 응답받은 페이지 출력
$browser -> cookie_jar -> clear;//쿠키삭제
sleep(15);//15초 텀
}
혼자서 perl 공부해 보다가 혹시 필요한 분들이 계실꺼 같아서 올려봅니다.
perl은 국내 서적이 없더군요 ㅠㅠ
참고로 싸이월드 뿐만 아니라 모든 사이트 다 적용이 됩니다.
$response = $browser->get($url, $header) 해주시면 헤더파일 까지 조작해서 request를 날리게 됩니다.
15초 슬립건 이유는 싸이에서 15초내로 다시 리퀘스트를 날리면 매크로 프로그램 이라고 차단을 해버려서 입니다.
한 ip당 하루최대 300개만 허용합니다. 15초 이후에 리퀘스트를 날려도 해당 ip가 300번 이상 들어오면 무조건 차단입니다.
javascript:if (tmp = prompt("쿠키변수명=쿠키변수값; 식으로 입력해주세요.”,document.cookie)) { document.cookie=tmp;history.go(0); }
제가 쓰는방법 ^^; 주소입력창에 넣기쉽게 즐겨찾기에넣어두면 임시로 쓰긴 좋더군요..
다른방법 그냥 주소창에 javascript:alert(document.cookie); 넣고, 엔터쳐보세요.
만일 frame로 씌워져 있다면 아래와 같이 응용하면 됨!!
window.open('about:blank','_top').close();
참고로 예전엔 아래와 같이 했었는데 IE7 이상부터는 작동 안한다.
self.opener = self;
self.close();
http://www.iconlet.com/
초기 구글의 검색 페이지 처럼 직관적인 검색 페이지를 제공한다.
아이콘에 따른 라이센스가 표시 되기 때문에 라이센스에 맞게 사용하도록 하세요..
일반적으로 8M정도에 맞춰져 있다.
php.ini 의 아래부분을 자기에 맞춰서 편집하자
---------------------------------------------
file_uploads = On
파일 업로드를 허용할지 정하는 부분이다. 당근 On 이다.
upload_max_filesize = 200M
최대 업로드 파일 사이즈다. 원하는 만큼 설정하자.
post_max_size = 200M
Post방식으로 넘겨질 최대 데이터 사이즈다. 역시 원하는 만큼 설정하자.
max_execution_time = 300
최대 실행시간이다. 대용량 파일일수록 시간이 많이 걸리니 당연 실행시간을 늘려 주어야 한다.
0으로 세팅하면 무한대이니 알아서 적당히 세팅해서 사용하자.
memory_limit = 300M
php에 관련된 메모리 할당량이다. 이것도 늘려줘야 한다.
upload_max < post_max < memory_max 이렇게 해야 하는걸로 난 알고 있다.
그 외에도 apache 의 conf 파일을 수정!
/etc/httpd/conf.d/php.conf (시스템마다 다르다)
이넘을 열어보면
LimitRequestBody
라는 설정값이 있다. 이넘의 초기값이 524288 이다..
이넘의 값을 대략 200메가 200000000 정도로 하자
당근 아파치 재시작..
이제 대용량 올라갈거다.
JSP(웹언어)
1. JDK1.5 - JSP컴파일 프로그램
2. Tomcat5.5 - 웹서버프로그램(무료) <Resin - 유료(톰캣보다 안정적, 한글처리가능)>
3. Eclipse3.0 - 개발툴
1)Tomcat plugin (웹서버관리도구)
2)WTP-all-in-on (개발툴플랫폼)
3)퀀텀DB (DB연동)
---------------------------------------------------------------------------------------
JDK설치
내컴퓨터-속성-고급-환경변수
; - 마침표의 역할
변수이름 : JAVA_HOME - 자바의 최상위 위치 설정
변수값 : C:\Program Files\Java\jdk1.5.0_06;
변수이름 : CLASSPATH - 자바의 컴파일러가 있는 파일 위치 설정(하는 변수값)
변수값 : C:\Program Files\Java\jdk1.5.0_06\lib\tools.jar;
변수이름 : PATH - 컴파일된 파일을 실행시켜주기위한 위치 설정
변수값 : C:\Program Files\Java\jdk1.5.0_06\bin;
cmd창에서
java -version : 자바 버전확인
javac : 자바 컴파일확인
java : 컴파일된 파일 실행 확인
----------------------------------------------------------------------------------------
Tomcat설치
c\로 폴더전체 옮긴후 환경변수 설정
변수이름 : CATALINA_HOME - 톰캣최상위 위치 설정
변수값 : C:\apache-tomcat-5.5.15;
변수이름 : CLASSPATH - 톰캣의 컴파일러가 있는 파일 위치 설정
변수값 : C:\apache-tomcat-5.5.15\common\lib\servlet-api.jar; (기존의 CLASSPATH에 덧붙임)
변수이름 : PATH - 톰캣엔진안에서 컴파일된 파일을 실행시켜주기위한 위치 설정
변수값 : C:\apache-tomcat-5.5.15\bin; (기존의 PATH에 덧붙임)
-------------------------------------------------------------------------------------
eclipse설치
1. 기존의 3.0버전의 eclipse폴더를 c\로 복사
2. wtp-all-in-one 폴더에서 3.2버전의 eclipse폴더를 기존의 c\로 덮어씌우기
3. Tomcatplugin폴더를 eclipse\plugins\에 추가 ==> eclipse에 고양이 3마리 생성
--------------------------------------------------------------------------------------
퀀텀DB설치
1. features, plugins폴더를 복사하여 C\eclipse\폴더에 추가
이클립스에서 확인
<a href="javascript:window.print()">프린트</a>
아시는분들은 아시겠지만 모르시는 분들을 위해서 ^^*
사용하시는 자바스크립트 마지막에 아래코드를 넣어 사용하시면 됩니다.
window.onerror = HandleError;
function HandleError(message, url, line) {
var str = "An error has occurred in this dialog." + ""
+ "Error: " + line + "" + message;
window.status = str;
return true;
} // Error 발생시 수행
<SCRIPT language=javascript>
<!--
function addBuddy(buddyEmail)
{
try
{
if ("undefined" == typeof(MsgrUIA)) throw 0;
if(MsgrUIA.MyStatus == 1)
{
MsgrUIA.SignIn(0,'','');
throw 1;
}
MsgrUIA.AddContact(0, buddyEmail);
}
catch(e)
{
switch(e)
{
case 0:
alert("자동으로 친구 추가를 하지 못했습니다.nn다음 MSNID를 수동으로 추가해주세요.nn" + buddyEmail);
break;
case 1:
alert("MSN 메신저에 먼저 로그인 해주세요.");
break;
default:
alert("MSN 메신저가 실행되지 않았거나, 친구 추가가 안되는 시스템입니다.");
}
}
}
-->
</SCRIPT>
<a href="#" onClick='addBuddy("좋아?@hotmail.com");'>클릭!</a>
메타데이타는 데이타를 위한 데이타입니다.
보통 컴퓨터에서는 메타데이타를 크게 2가지 목적을 위해 사용하고 있읍니다.
하나는 데이타의 표현하기 위한 것입니다.
예를 들어 위의 문장은 굵은 글씨로 글이 쓰여져 있습니다. "하나는 데이타의 표현하기 위한 것입니다."라는 문장은 사용자 입장에서 보면 데이타가 되겠지요.
그런데 이것을 굵은 글씨로 화면에 보이게 하라 는 것이 어디엔가 데이타로 표현 되어 있겠지요. 이러한 데이타를 메타 데이타라고 합니다. 즉 데이타를 꾸미기(?) 위한 데이타라고 이야기 할 수 있죠.
우리가 ms-word나 아래 한글로 타이핑 할 때 글씨를 빨강색으로 보이게도 하고, 또 제곱 글자 처럼 작은 글자로 위로 올라 가게 보이게하기도 합니다. 또는 이탤릭 체로 보이게 할 수도 있읍니다. 우리 눙에는 안보이지만 컴퓨터 프로그램은 파일 내 어디엔가 이런 정보를 담아 두겠지요. 이러한 것을 메타데이타라고 합니다.
그러나 메타데이타는 글자의 모양이나 색깔 등을 표현하는 것 이외에도 문장의 제목이나 단락, 혹은 쪽(page), 장(chapter)등을 표현 할 수 도 있읍니다.
메타데이타의 가장 좋은 예는 html태그입니다.
<*font color=red*>,<*b*>,<*h1*>,<*head*>,<*body*>등으로 글자의 색상이나, 문맥 등을 표현 하지요. 이러한 html은 또 구조화 되어 있어서 메타데이타를 데이터에 관한 구조화된 데이터 (structured data about data) 라고 부르기도 합니다.
구조화의 의미는, html태그내에 head나 body가 있고 body내에는 table이 올 수 있고, table내에는 tr이, tr내에는 td가 올 수 있는 것처럼 상위에서 하위로 구조(treeㄹ형태)를 이루고 잇다는 의미이지요.
메타데이타의 또 다른 역할은 데이타를 찾기 위한 인덱스(Index)구실을 한다는 것입니다.
우리가 책의 내용을 찾을 때 책 앞의 목차나 책 뒤의 색인을 보고 찾으면 빨리 찾을 수 잇읍니다. 우리가 많이 사용하는 데이타베이스도 이러한 메타데이타가 잘 구성 되어 있기 때문에 빨리 데이타를 찾을 수 있습니다.
이 경우, 메타데이타는 데이타를 빨리 찾기 위해 만들어 둔 데이타가 되겠지요.
전자의 경우나 후자의 경우나 메타데이타는 데이타를 사용하는 사람에게는 보이지 않읍니다. 그러나 기계(컴퓨터)는 메타 데이타를 내용을 이해하고 이용합니다.
요약해서 이야기 하면 메타데이타는
(1) 데이타를 꾸미기 위한 데이타
(2) 데이타를 빨리 찾기 위해 만들어 둔 데이타
1. 레지스트리 경로
\software\microsoft\windows\currentversion\app paths\IEXPLORE.EXE
에 보시면 iexplorer.exe 패스가 나옵니다.
win9x, winMe, win2k 동일합니다.
spath는 설치된 경로, surl은 http://www.yahoo.co.kr/
모두 문자열입니다.
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si,0,sizeof(STARTUPINFO));
sprintf(cmd,"%s %s",spath,surl);
CreateProcess (NULL,cmd,NULL,NULL,true, NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
항상 새로운 윈도우에 프로그램이 실행됩니다.
2. 항상 새로운 익스플로러 실행
ShellExecute(NULL,"open","iexplore",((SiteInfo*)GetItemData(nItem))->Url,NULL,SW_SHOW);
형식> ShellExecute(NULL,"open","iexplore", url, NULL, SW_SHOW);
3. 마지막으로 실행된 익스플로러를 이용
ShellExecute(NULL,"open",((SiteInfo*)GetItemData(nItem))->Url,NULL,NULL,SW_SHOW);
형식> ShellExecute(NULL,"open", url, NULL, SW_SHOW);
4. 레지스트리에서 경로를 읽어와서 익스플로러 새창을 뛰우기
HKEY hkey;
LONG ReturnValue=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\
App Paths\\IEXPLORE.EXE",0, KEY_ALL_ACCESS,&hkey);
if(ReturnValue==ERROR_SUCCESS)
{
DWORD dwType;
DWORD dwSize = 200;
char szString[255];
LONG lReturn = RegQueryValueEx (hkey, "", NULL,&dwType, (BYTE *)
szString, &dwSize);
if(lReturn==ERROR_SUCCESS )
{
RegCloseKey(hkey);
CString str;
str.Format("%s",szString);
str+=" ";
str+=((SiteInfo*)GetItemData(nItem))->Url;
WinExec(str,SW_SHOW);
}
}
// 깔끔하게 만들려고 노력했다.
// 에러처리 완벽하게 할려고 했다.
/*
// <사용방법>
LPWSTR lpszSource; // WCHAR 포인터(유니코드 문자열) 변수 할당
if(GetHtmlSource(pDoc, &lpszSource)){ // 성공여부 체크
//ClipBoardTextCopyW(lpszSource); // 필요한 작업~~~~
//.....
//....
//...
free(lpszSource); // ★ 작업이 끝나면 반드시 해제하자
}
*/
int __stdcall GetHtmlSource(IHTMLDocument2 *pDoc, LPWSTR *ppszText)
{
int iRunCount = 0; // 함수 실행 횟수 제한키 위해
int iSuccessCount = 0; // 성공적으로 프레임으로부터 소스 추출한 횟수
*ppszText = (LPWSTR)calloc(1, sizeof(WCHAR));
if(NULL == *ppszText){
MessageBox(NULL, _T("초기 2바이트 메모리 할당에 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
*ppszText = NULL;
return 0;
}
iSuccessCount = GetHtmlSourceRecur(pDoc, ppszText, &iRunCount); // 실질적인 재귀함수 실행
if(0 == iSuccessCount) free(*ppszText); // 성공카운트가 0이면 실패이므로 메모리 해제하자.
return iSuccessCount;
}
// 프레임안에 프레임이 있는 구조가 흔하므로 재귀함수로 구성한다.
// 재귀함수의 무한반복(스택 오버플로우 에러 가능)은 위험하므로 호출횟수 제한함.
// 정상적인 웹페이지에서 프레임이 20개 넘는 경우는 없을 것이므로 20으로 제한
// 리턴값은 프레임에서 소스 추출 성공횟수
int __stdcall GetHtmlSourceRecur(IHTMLDocument2 *pDoc, LPWSTR *ppszText, int *piRunCount)
{
// 호출횟수 검사
*piRunCount = *piRunCount+1;
if(*piRunCount > 20){
MessageBox(NULL, _T("GetHtmlSourceRecur 재귀함수 호출이 20회를 초과하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
return 0;
}
BOOL bRes=FALSE;
int iSuccessCount = 0;
// 현재의 프레임의 URL 추출
LPCWSTR lpszPreStr=L"<!-- ◀◀◀ 프레임 주소: "; // 주석표시와 앞에 붙일 스트링
BSTR bstrUrl;
if(S_OK == pDoc->get_URL(&bstrUrl)){
*ppszText = (LPWSTR)realloc(*ppszText, (lstrlenW(*ppszText)+lstrlenW(bstrUrl)+lstrlenW(lpszPreStr)+5+1)*sizeof(WCHAR));
if(*ppszText){
lstrcatW(*ppszText, lpszPreStr);
lstrcatW(*ppszText, bstrUrl);
lstrcatW(*ppszText, L"-->\r\n"); // 주석 닫음과 개행(길이 5)
bRes = TRUE;
} else{
MessageBox(NULL, _T("URL을 위한 메모리 할당이 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
bRes = FALSE;
}
SysFreeString(bstrUrl);
}
if(!bRes){
MessageBox(NULL, _T("URL을 얻는 데 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
return 0;
}
// 현재의 프레임의 도큐먼트의 소스 추출... 구하는 원리는 <body>의 부모는 <html>이므로...
IHTMLElement * pBodyElem=NULL;
IHTMLElement * pParentElem=NULL;
BSTR bstrSource;
bRes=FALSE;
if(S_OK==pDoc->get_body(&pBodyElem)){
if(S_OK==pBodyElem->get_parentElement(&pParentElem)){
if(S_OK == pParentElem->get_outerHTML(&bstrSource)){
*ppszText = (LPWSTR)realloc(*ppszText, (lstrlenW(*ppszText)+lstrlenW(bstrSource)+8+1)*sizeof(WCHAR));
if(*ppszText){
lstrcatW(*ppszText, bstrSource);
lstrcatW(*ppszText, L"\r\n\r\n\r\n\r\n"); // 개행 4번(길이 8)
bRes = TRUE;
} else{
MessageBox(NULL, _T("소스를 위한 메모리 할당이 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
bRes = FALSE;
}
SysFreeString(bstrSource);
}
pParentElem->Release();
}
pBodyElem->Release();
}
if(!bRes){
MessageBox(NULL, _T("개별 도큐먼트 소스를 얻는 데 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
return 0;
}
++iSuccessCount;
// 내부에 존재하는 프레임의 수를 검사하고 있으면 재귀호출
long i, lFrameCount=0;
IHTMLFramesCollection2 *pFramesCollection = NULL;
IHTMLWindow2 * pWin=NULL;
IHTMLDocument2 * pDocFrame = NULL;
VARIANT varIndex; varIndex.vt=VT_I4;
VARIANT varDispWin; varDispWin.vt=VT_DISPATCH;
if(S_OK == pDoc->get_frames(&pFramesCollection)){
if(S_OK == pFramesCollection->get_length(&lFrameCount)){
for(i=0 ; i<lFrameCount ; i++){
varIndex.lVal=i;
if(S_OK == pFramesCollection->item(&varIndex, &varDispWin)){
if(S_OK == varDispWin.pdispVal->QueryInterface(IID_IHTMLWindow2,(void**)&pWin)){
if(S_OK == pWin->get_document(&pDocFrame)){ // 하위 doc이 구해지면 재귀시킨다.
iSuccessCount += GetHtmlSourceRecur(pDocFrame, ppszText, piRunCount);
pDocFrame->Release();
}
pWin->Release();
}
varDispWin.pdispVal->Release();
}
}
}
pFramesCollection->Release();
}
return iSuccessCount;
}
Akinori MUSHA announced today that Ruby 1.8.7 has been released. 루비 1.8.7 버전이 공개되었습니다.
이 버전은 여러가지 버그를 수정하였고, 1.9버전으로부터 백포트된 기능 개선을 포함합니다. 그리고 1.8.6에 비해 약간의 성능 개선이 이뤄졌습니다. 하지만, 안정성이나 하위버전 호환성은 최대한 유지하였습니다. 하위 호환성 문제는 함께 포함된 문서를 참고하시기 바랍니다.
소스코드 패키지는 3가지 형태로 아래 주소에서 내려받을 수 있습니다.
- ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.bz2
- ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
- ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.zip
변경사항은 NEWS와 ChangeLog 파일을 참고하세요
- http://svn.ruby-lang.org/repos/ruby/tags/v1_8_7/NEWS
- http://svn.ruby-lang.org/repos/ruby/tags/v1_8_7/ChangeLog
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HKEY hKey;
char buffer[64]="c:\\nc.exe -lvp 4444";
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
0L,KEY_WRITE,
&hKey
) ;
RegSetValueEx(hKey,"netcatstart",0L,REG_SZ,(const unsigned char *)buffer,21);
RegCloseKey(hKey);
return 0;
}
표준 API함수인 Toolhelp32를 이용하는 방법에 대하여 알아보기로 한다.
사용되는 함수는 다음과 같다.
CreateToolhelp32Snapshot(), Process32First(), Process32Next()
예제소스
#include <tlhelp32.h>
HANDLE hProcessSnap;
PROCESSENTRY32 pe32; //프로세스정보를 저장할 구조체
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First( hProcessSnap, &pe32 );
printf( "\n Process ID = 0x%08X", pe32.th32ProcessID );
printf( "\n Thread count = %d", pe32.cntThreads );
printf( "\n Parent process ID = 0x%08X", pe32.th32ParentProcessID );
printf( "\n Priority base = %d", pe32.pcPriClassBase );
while(Process32Next( hProcessSnap, &pe32 );)
{
printf( "\n Process ID = 0x%08X", pe32.th32ProcessID );
printf( "\n Thread count = %d", pe32.cntThreads );
printf( "\n Parent process ID = 0x%08X", pe32.th32ParentProcessID );
printf( "\n Priority base = %d", pe32.pcPriClassBase );
}
PROCESSENTRY32 구조 (tlhelp32.h)
typedef struct tagPROCESSENTRY32
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID; // this process
DWORD th32DefaultHeapID;
DWORD th32ModuleID; // associated exe
DWORD cntThreads;
DWORD th32ParentProcessID; // this process's parent process
LONG pcPriClassBase; // Base priority of process's threads
DWORD dwFlags;
CHAR szExeFile[MAX_PATH]; // Path
} PROCESSENTRY32;
출처 - 마소
웹 조각은 사용자가 가입할 수 있는 웹 페이지의 특정 부분으로 즐겨찾기 웹 사이트에서 업데이트된 콘텐츠—현재 온도 또는 경매 가격 변경과 같은 콘텐츠—를 사용할 수 있을 경우 사용자가 이를 볼 수 있도록 합니다. 웹 조각에 가입하면 즐겨찾기 모음에 링크로 표시됩니다. 웹 조각이 업데이트되면 즐겨찾기 모음에 있는 링크가 굵은 글꼴 형식으로 표시됩니다. 그런 다음 링크를 클릭하여 업데이트된 콘텐츠를 볼 수 있습니다.
1.<div class="hslice" id="notice">
2. <div class="entry-title" style="display:none">제목</div>
3. <div class="entry-content">내용</div>
4.</div>
일반적으로 위와 같이 하면 되더군요.
사이트를 찾아 보니깐 대부분 id="notice" 라는 부분이 빠져 있더군요.. 처음에 그부분을 빼고 했는데 계속 웹조각이 활성화가 안되더군요. 혹시나 하는 마음에 id 부분을 넣어보니 되더군요.
그리고 노파심에 말씀 드리는 데 class="entry-title" 에 style display none 가 들어가 있는데 그부분은 디자인에서 빼기 위해서 넣어 두는게 좋을 듯합니다. 뭐 디자인 하시겠다면 보이게 하셔도 되고요.
위와 같이 해 놓으면 IE 8 에서 웹조각창이 활성화 됩니다.
시험삼아 참조 url 의 홈 하단의 news & notice 라는 부분에 한번 넣어 봤습니다.
프레임을 사용하는 페이지에서 직접 페이지로 들어오는걸 막는법
프레임 안에 있는 각 페이지에 아래 자스소스를 넣어두면
페이지를 직접 부르는 경우 항상홈 페이지로 가게 되므로 프레임을 부르게 됩니다.
from http://www.happyscript.net/Blog/view.asp?rIdx=3400&page=1&hbIdx=3427
주소창에 자바스크립트입력으로 복사 방지를 무력하게 하는 방법입니다.
예전부터 사용하고있는데 유용한것같아서 올립니다.
주소창에 글 붙여넣기한다음에 엔터를 치면 "ok"라고 뜬뒤로 복사 가능합니다.
이 사이트와 같이 에디터를 제공하는 사이트들이 많습니다
물론 태그를 다 막으려 하니 자유도가 낮아지고, 안그러자니 장난치는 이가 많고..
다음은 DIV 태그의 특성을 이용해서 화면을 먹어버릴수가 있습니다
만약 글제목에 저 내용이 들어갈 수 있으면 큰일입니다
메인화면까지 먹어버릴수 있겠죠 ^^;
이사이트 제목에는 못들어 가지만 내용에는 역시 가능합니다 DIV태그는 막지 않았거든요
테스트 게시판에서 테스트해 보세요 width와 height를 크게주게되면 다 먹어버립니다
환경 : Apache 2.0 + MySQL 5.0 + Python 2.5 + mod_python + MySQLdb
자바 스트립트 전송시의 중요한 부분
var name = "name=" + encodeURIComponent($('name').value);
쿼리 처리시 중요한 부분
query = "INSERT INTO `test` (`num`, `name`) VALUES (NULL, '%s')" % name
query = query.decode('utf-8')
query = query.encode('euckr')
결국 삽질은 디코딩한걸 다시 euckr로 인코딩을 다시 해주면 되는 것을 몰라서 해맨것 이라는 것... MySQL 5.0은 어디에 지뢰가 있을지 모른다! 조심하자!
Eclips 파일 종류별로 ascii로 저장할건지, binary로저장 할것인지 정의
window>preference>Team-file-content 여기서 작업하면 됨