Search Results for '전체 분류'
2064 posts related to '전체 분류'
- 2010/03/22 ASP용 로그 기록 클래스 2
- 2010/03/22 jQuery plugin, Pager 입니다
- 2010/03/22 SQL 쉽게 쉽게 코딩하기 - 날쿼리 -
- 2010/03/22 썸네일 생성 dll (codeproject에서 다운받은놈)
- 2010/03/22 실시간 스팸차단리스트(RBL) 이용방법
- 2010/03/22 Windows 7 에서 Windows Move Maker 2.6 사용하는 법
- 2010/03/22 인터넷 익스플로러 9 프리뷰
- 2010/03/18 구글 트랜드 검색
- 2010/03/18 로딩 이미지 만들어주는 사이트
- 2010/03/18 싸이트로딩속도 + 파일별로딩속도 알려주는 사이트
- 2010/03/18 MY - SQL 인젝션 복구쿼리
- 2010/03/18 상태표시줄 링크 없애기
- 2010/03/18 google의 java script hosting
- 2010/03/18 jquery hosting을 로컬에서 구글로 변경하기
- 2010/03/18 <form 안에 있는 checkbox를 radio 처럼 쓰기
- 2010/03/18 Jquery 체크박스 사용법
- 2010/03/18 iframe내의 id셀렉터
- 2010/03/18 csv를 읽어서 테이블로 보여주는 플러그인
- 2010/03/18 json 사용시 엔터(newline) 넘길때 에러나는 경우
- 2010/03/18 jQuery + 정규표현식( 이메일검증법)
- 2010/03/18 jquery 오른쪽 마우스금지
- 2010/03/16 무설치로 너무빠른조각모음~UltimateDefreg Portable
- 2010/03/16 말하는_시계 입니다.
- 2010/03/16 캐릭터 키우기 입니다. 1
- 2010/03/16 (유용한 자료) 윈도우용 여성 음성 멘트
- 2010/03/14 김영삼 수원일보 7
- 2010/03/14 JavaScript - 외부 이미지 크기 구하기
- 2010/03/14 지정한 두 기간 사이의 날짜 랜덤 생성
- 2010/03/14 Gmail, Outlook Express 사용 위해 설정시 오류 관련
- 2010/03/14 jqGrid 3.5 한글 번역 파일입니다.
많은 개발자들이 개발을 하면서 중간 중간 소스에 Response.Write 변수 를 추가 합니다.
이유는 디버깅 용이죠! ^^
하지만, 개발 완료 후 삭제도 해야 하고 혹여나 깜빡하고서 누락하는 경우가 있는데요.
누락한 것 중 지저분 해지기만 하고 문제가 되진 않지만 어떤 사람들은 dB 커넥션 문자열을 찍어서
노출이 되는 경우도 있기도 합니다. ㅎㅎㅎ
공개 소스 중에는 Log4J라는 모듈이 있습니다만, 이건 JSP, Ruby, .Net 용으로만 있고 ASP용은 없지요.
그래서 아쉬운 대로 만들어 봤습니다.
제가 생각했을 때 이 클래스를 사용하므로서 얻을 수 있는 이득을 나열해 보죠.
1. 운영 중에도 에러나 기타 정보를 기록하여 디버깅 및 유지보수에 용의합니다.
2. 실수로 중요 정보가 외부에 노출되는 것을 방지합니다. (예: Response.Write에 의해)
3. 확장 함수를 이용하여 받아들인 파라미터 등을 기록하는 것이 가능합니다.
4. 로그 레벨을 이용 하여 기록 기준을 정의 할 수 있으므로 성능이 나빠지는 것에 대응 할 수 있습니다.
5. 파일에 기록이 되므로 언제든 역 추적이 가능합니다. ( 1번과 비슷 한 내용이네요 ^^ )
다음은 사용 예입니다.
<!--#include virtual="ClsLogger.asp"//-->
<%On Error Resume Next%>
<%
'// Logger
Dim oLog : Set oLog = New ClsLogger
'// Request Log
TraceRequestParameter oLog
'// FATAL : 치명적 에러
oLog.Fetal "치명적 에러!!! 관리자 빨리 보삼. : " & Err.Description
'// ERROR : 수행 가능한 정도의 에러
oLog.Error "또 에러냐!!! : " & Err.Description
'// WARN : 문제를 일으킬 가능성의 정보
oLog.Warn "이건 귀찮아서 처릴 안했단 말이오!!! : "
'// INFO : 정보를 나타낼 때 사용
oLog.Info "게시판 목록 시작"
'// DEBUG : 상세 정보를 나타낼 때 사용
oLog.Debug "지금은 개발 중..."
If ( Err.Number = 0 ) Then
oLog.Debug "완료"
Else
oLog.Error Err.Description
End If
'------------------------------------------------------------------------------------
'// Request 객체의 파라미터 값을 로그에 기록한다.
'// 이 함수는 ClsLogger에 포함 시킬지 말지 고민중 ... ㅠㅠ
'------------------------------------------------------------------------------------
Sub TraceRequestParameter(ByRef pLog)
On Error Resume Next
Dim pContentType : pContentType = LTrim(Request.ServerVariables("CONTENT_TYPE"))
If ( InStr(pContentType, "multipart/form-data") > 0 ) Then
Exit Sub
End If
If ( Not IsObject(pLog) ) Then
Exit Sub
End If
Dim z
Dim pKeyName
pLog.Debug "============= FORM PARAMETER ============="
For z = 1 To Request.Form.Count
pKeyName = Request.Form.Key(z)
pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestForm(""" &
pKeyName & """)"
Next
For z = 1 To Request.Form.Count
pLog.Debug Request.Form.Key(z) & " : " & Request.Form(z)
Next
pLog.Debug "========== QUERYSTRING PARAMETER ========="
For z = 1 To Request.QueryString.Count
pKeyName = Request.QueryString.Key(z)
pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestQuery(""" &
pKeyName & """)"
Next
For z = 1 To Request.QueryString.Count
pLog.Debug Request.QueryString.Key(z) & " : " & Request.QueryString(z)
Next
pLog.Debug "=========================================="
Err.Clear
On Error GoTo 0
End Sub
%>
저의 경우 주로 .Error와 .Debug를 사용합니다.
일단 속는 셈 치고 한번 사용해보셔요. ^^
많은 분들이 자기가 원하던 거라고 하시더군요. 다행 다행.
아 그리고 로그뷰어는 "mtail" 이라는 프로그램을 이용합니다. 네이년에서 mtail로 검색을 하시면 쉽게 구 할 수 있어요.
간단하게 소개하면
기록되는 로그를 실시간으로 모니터링 할 수 있고,
필터링도 가능합니다. 이 필터링을 이용하면 Error만 볼수도 있고 Debug만 볼수도 있습니다.
유용한 프로그램이에요 ^^
그럼 사용해보시고 부족한 부분은 리플 달아주세요~
페이징 기능을 덧붙이고자 하는 경우에 도움이 되는 애드인입니다.
다만, 이는 실제 데이터를 가져오거나 하는 애드인이 아니며, 오로지 전체 레코드 수(totalItemCount)와 페이지 당 출력할 레코드 수(RecordPerPage)에 따라서 전체 페이지 수와 페이징 구역을 계산 및 출력 하는 애드인입니다.
실제로 해당 페이지의 데이터를 가져오는 함수는 여러분이 직접 작성하셔야 하며,
페이저 사용 규칙에 맞게 함수를 호출하시면 페이징이 자동으로 렌더될 것입니다.
샘플은 http://taeyo.net/jQuery/Sample/pager.htm 을 참고하십시오.
현재, 태오 사이트의 새로운 디지털 다이어리는 이 애드인을 사용하여 만들어지고 있습니다.
다음은 사용방법입니다.
1. 페이저를 출력할 위치를 html 태그로 작성한다.
예 : <span id="pager"></span>
2. jQuery의 ready 함수 안에서 다음과 같이 페이저를 초기화 한다.
$("#pager").pager({
pager: "#pager",
pagerMode: "image", //text, image 중 선택
totalItemCount: _totalItemCount,
recordPerPage: _recordPerPage,
currentPage: _currentPage,
pageIndexChanged: Pager.pageIndexChanged,
prev10Text: "<<",
next10Text: ">>",
prev10ImgSrc: "images/Prev10.gif",
next10ImgSrc: "images/next10.gif",
selectedPageFontColor: "orange"
});
_totalItemCount와 _recordPerPage, _currentPage는 전역변수로 선언되어야 할 것이다.
그리고, 이 값은 여러분이 적절하게 설정하면 된다.
3. 페이저의 클릭 이벤트와 관련된 콜백 메서드들을 여러분에게 맞게 정의하자.
var Pager = {
pageIndexChanged: function(selectedPage) {
_currentPage = selectedPage;
loadBoardData(); //목록 조회 및 출력 메서드 호출
}
}
여기서의 loadBoardData() 메서드는 여러분이 데이터베이스에서 데이터를 조회하는 메서드이다.
메서드 명은 여러분의 상황에 맞게 바꾸면 된다.
강조했듯이, 페이저 애드인이 실제 데이터를 로드해주지는 않는다.
4. loadBoardData() 메서드 안에서 여러분의 작업이 모두 끝난 다음, 제일 마지막에 다음과 같은 코드를 추가하여
페이저를 갱신하도록 한다. 갱신을 하지 않으면, 페이저의 페이징 정보가 실제 갯수와 동기화 되지 않을테니 말이다.
갱신을 위해서는 다음의 메서드를 호출하면 된다. 반드시 refresh의 인자로 _totalItemCount, _recordPerPage를 넘겨줘야만
제대로 갱신된다는 점에 주의하자.
또한, refresh 메서드는 계산된 전체 페이지 갯수를 반환한다.
function loadBoardData()
{
//여러분의 작업
//...
//...
var pageCount = $("#pager").pager.refresh(_totalItemCount, _recordPerPage);
}
끝.
ps : 1차 배포 후, 일부 로직을 개선하여 좀 더 코드를 줄였습니다. 현재 파일은 2차 배포버전입니다.
태요사이트에서 몇개 클래스 긁어다가 만들때 좀 썼습니다.
간략하게 예를 들면
sql = "select seq,name from tb_board where seq = 1" 를 클래스를 써서 표현하자면..
db.initSQL("select")
db.setTable("tb_board")
db.setColumn("seq")
db.setColumn("name")
db.setWhere "seq", 1, "number"
뭐 이런식으로 씁니다.
살짝만 생각하면, 어지간한 쿼리는 아주 간단하고 깔끔하게 처리할 수 있어요
쿼리.sql 에 테이블이 하나 빠져서 방금 다시 올렸어요
나누미플러스나, KMS썸넬등은 2003 서버에서 뻗어버리는 경우가 많아서..
코드프로젝트에 올려진 소스에서 쓰잘데기 없는부분 빼버리고,
썸넬만 만드는 부분 함수로 만들어놨습니다. (sub 함수로 전환시켜서 쓰는게 더 편할듯 하네요)
참고로.. 덱스트든 abc든 일단 업로드 끝나고, 저장한 원본 파일명 던져주면 됩니다.
DLL 은 가장 최근꺼구요..
원 개발자가 만든 소스나 메서드 종류 보시려면.. 다운 받아서 살펴보심 되요.. (물론 C++ 소스일껍니다)
KISA-RBL 서버에서 스팸리스트를 다운로드하는 방법과
메일 서버(Sendmail, qmail, Postfix, Exchange Server)에서 참조할 수 있는 방법이 설명되어 있습니다.
첨부파일을 참고해 주세요.
출처 : kisarbl.or.kr (한국인터넷진흥원 스팸대응팀)
http://windowsforum.kr/943064 (Windows 7 에서 Windows Move Maker 2.1 사용하는 법)
에서 알려드린 것 처럼, Windows 7 에서는 Windows Movie Maker 가 더이상 포함되지 않습니다.
이전 글에서는 Windows XP 또는 Windows XP Mode 에 내장된 Windows Movie Maker 2.1 을
빼와서 DLL File 을 등록시켜서 작동시키는 방법을 사용했다면, 더이상 이런 수고를 하지 않으셔도 됩니다.
이유는 Vista 용 Windows Movie Maker 2.6 을 그대로 사용 가능하기 때문입니다.
1. http://download.microsoft.com/download/2/e/3/2e33cda0-9eea-4308-b5a6-2e31abad6523/MM26_KOR.msi
Windows Vista 용 Windows Move Maker 2.6 을 받습니다. 참고로 한글판입니다.
혹 위 직접 Link 가 작동하지 않을 경우는...
에 들어가서 아랫쪽으로 Scroll 을 내리면, MM26_KOR 항목이 있습니다. 옆에 '다운로드'를 눌러서 받으시면 됩니다.
2. MM26_KOR.msi 를 실행시키고, 설치하면 됩니다.
3. C:\Program Files (x86)\Movie Maker 2.6\ 경로 에 설치가 되었습니다.
덧글 : 외국 Forum 에서 더 좋게 개량한 Windows Movie Maker 2.6 Enhancement Pack 이라고 있습니다.
단, 영문판입니다.
그리고 Windows 7 만의 독특한 기능인지는 모르겠습니다만, Windows Movie Maker 2.6 을 모르고 지웠을때
시작 Menu 등의 바로가기 + msi File 만 있으면 감쪽같이 복원이 됩니다.
마이크로소프트에서 공개한 MS 인터넷 익스플로러 9 프리뷰입니다.
IE 9 프리뷰는 브라우저의 속도개선과 차세대 웹표준인 HTML5의 일부를 지원하며
멀티 코어 프로세서 시스템에서는 보다 빠르게 동작합니다.
맛보기 버전격이라 할 수 있으므로 기능/호환성에도 문제가 있을 수 있습니다.
지원하는 운영체제는 윈도우 Vista, 7 이며
Vista 사용자일 경우 인터넷 익스플로러 8 과 DirectX 2D (D2D)이 설치되어 있어야 합니다.
이 프로그램은 프리웨어입니다.
다운로드 링크 주소: http://ie.microsoft.com/testdrive/
이 프로그램 다운로드 받기: http://ie.microsoft.com/testdrive/info/ThankYou/Default.html
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 변경 하시면 됩니다.
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
exec ('select ['+@C+'] from ['+@T+'] where ['+@C+'] like ''%<script%</script>''');
-- print 'select ['+@C+'] from ['+@T+'] where ['+@C+'] like ''%<script%</script>'''
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
* 위의 공격을 당했을 때 복원하는 쿼리 (100% 다 되는 것은 아님 - 별도 확인 필요)
* 해킹 시 길이가 긴 경우에는 짤리고 들어가는 현상이 발생함 - 이 경우에는 복원을 해도 원상복구가 안됨
* 백업 받은 것을 복원하는 수 밖에는 없음
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
EXEC(
'update ['+@T+'] set ['+@C+'] = left(
convert(varchar(8000), ['+@C+']),
len(convert(varchar(8000), ['+@C+'])) - 6 -
patindex(''%tpircs<%'',
reverse(convert(varchar(8000), ['+@C+'])))
)
where ['+@C+'] like ''%<script%</script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
DB injection 공격?
구글에서 <script src= 0.js 라고 검색하면 놀랄 정도로 많은 사이트들이 DB 공격을 받았음을 확인 하실 수 있을겁니다.
제가 관리하는 사이트 또한 위와같은 스크립트 삽입되어 수많은 사이트를 찾아 다니며 복구하고 나름대로 보안하는 방법을 접하게 된 것을 올려 봅니다.
1. 공격 유형 :
SQL injection 홈페이지 상의 DB사용하는 페이지를 공격 즉, 웹소스 취약한 곳을 통해 DB를 공격.
특수 코드 삽입해서 DB에 스크립트를 삽입하여 접속하는 사용자에게 악성코드를 설치하는 유형.
2. 조치 시 주의 사항
1) 홈페이지 변조를 통해 악성코드 링크를 삽입한게 아니라, SQL injection 기법을 이용해 DB 컨텐츠에 삽입한 것입니다.
2) 조치 시 DBA 의 도움을 받는게 좋습니다.
3) 공격 때문에 기존의 데이터가 일부 덧씌워져 변경되었을 수 있습니다. 이럴 땐 백업의 도움을 받아야 겠지만, 일부 데이터의 유실은 어쩔 수 없을 듯...
4) 근본 원인은 사이트가 SQL injection 공격에 취약하게 개발되어 있어서 그렇습니다. 공격 포인트를 파악해서 외주개발 업체, 혹은 내부개발팀을 통해 소스를 수정하세요.
5) 소스를 수정할 수 없는 경우 웹 방화벽이 도움이 될 수도 있습니다. 그러나, 제품 도입시 면밀히 검토하실 필요가 있습니다. 단순 패턴 매칭 형태를 사용해서, 보유패턴과 1byte 만 틀려도 탐지 못하는 제품이 몇 개 있더군요.
3. 공격으로 생긴 DB table 삭제
comd_list 테이블 삭제
ahcmd 테이블 삭제
foofoofoo 테이블 삭제
Reg_Arrt 테이블 삭제
comd_list 테이블 삭제
D99_CMD 테이블 삭제
D99_TMP 테이블 삭제
Kill_kk 테이블 삭제
jiaozhu 테이블 삭제
4. 삽입 스크립트 제거 복구
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype<object id=sayboxtistorycom4534743 codeBase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0 height="100%" width="100%" classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000> <object width="100%" height="100%" wmode="transparent" id="sayboxtistorycom4534743" src="http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestsayboxtistorycom4534743&id=453&callbackId=sayboxtistorycom4534743&host=http://saybox.tistory.com&float=left&" allowscriptAccess="always" menu="false" type="application/x-shockwave-flash" ></object></object>= 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
EXEC(
'update ['+@T+'] set ['+@C+'] = left(
convert(varchar(8000), ['+@C+']),
len(convert(varchar(8000), ['+@C+'])) - 6 -
patindex(''%tpircs<%'',
reverse(convert(varchar(8000), ['+@C+'])))
)
where ['+@C+'] like ''%<script src=http://s.ardoshanghai.com/s.js></script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
'스크립트 부분은 삽입된 스크립트를 입력
5. 보안 적용 1 - MSSQL 메모리에서 위험한 sp들을 내린다.
보안상 위협이 될 수 있는 개체들에 대하여 일반 사용자 그룹의 사용권한을 제한한다.
SP 등록해제는 위험을 감안해야 하므로 메모리에서만 내린다. 단점, 재부팅되거나 DB 재시작시 다시 아래 쿼리 실행 할것!
dbcc xp_cmdshell(free)
dbcc xp_dirtree(free)
dbcc xp_regdeletekey(free)
dbcc xp_regenumvalues(free)
dbcc xp_regread(free)
dbcc xp_regwrite(free)
dbcc sp_makewebtask(free)
6. 보안 적용 2
무엇보다 DB 인젝션이 발생한 원인인 로그인, 회원가입, 게시판 등 사용자가 DB를 접하게 되는 소스 개발시 특수 문자 보안 적용 안된 경우가 가장 유력하다.
로그인, 회원가입, 아이디 비번찾기, 게시판 등이 개발자가 개발하면서 DB를 공격할만한 특수 문자에 대한 차단 기능을 적용하지 않은 문제로 판단됨. 소스를 모두 개선 해야함.
-subroutine-
<!--
function StatusHidden() {
window.status = "안녕하세요";
setTimeout("StatusHidden()", 0);
}
StatusHidden();
//-->
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
구글의 jquery hosting을 쓰면 빠른속도(구글은 여기저기에 cdn이 있으니까요)와 함께
호스팅에서 발생하는 traffinc을 줄이는 것이 가능 합니다.
(원본)
<script type="text/javascript" src="<?=$g4['path']?>/js/jquery.min.js"></script>
(수정본)
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.js"></script>
loop....
<input type=hidden name=it_id[$i] >
...end loop
$("#fwishlist input:checkbox[name^=it_id]").click( function(){
$("#fwishlist input:checkbox:checked[name^=it_id]").attr('checked',false);
$(this).attr('checked',true);
});
jquery를 이용한 체크박스 부분에 관련된 내용이 없어서 간단하게 한번 만들어보았습니다.
저보다 더 좋은 내용이 있으면 코멘트 달아주세요
<html>
<head>
<title></title>
<script type="text/javascript" src="./script/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#selectall").click(selectAll);
$("#save").click(save);
});
function selectAll()
{
var checked = $("#selectall").attr("checked");
$(".box").each(function(){
var subChecked = $(this).attr("checked");
if (subChecked != checked)
$(this).click();
});
}
function save()
{
var result = "";
$(".box:checked").each(function() {
$("#"+$(this).val()).remove();
result += $(this).val();
//AJAX로 넘겨줄때는
//.get('XXX.php',{SelType:$(this).val()});
});
alert(result);
}
</script>
</head>
<body>
<table>
<tr><td><input type="checkbox" id=selectall></td><td>1전체선택</td></tr>
<tr><td><input type="checkbox" name="chkbox" value="1" class="box"></td><td>1</td></tr>
<tr><td><input type="checkbox" name="chkbox" value="2" class="box"></td><td>1</td></tr>
<tr><td><input type="checkbox" name="chkbox" value="3" class="box"></td><td>1</td></tr>
<tr><td><input type="checkbox" name="chkbox" value="4" class="box"></td><td>1</td></tr>
<tr><td><input type="checkbox" name="chkbox" value="5" class="box"></td><td>1</td></tr>
<tr><td><input type="button" value="저장" id="save"></td></tr>
</table>
</body>
</html>
$('#iframeID').contents().find('#someID').html();
전 이걸 몰라서 헤멨는데 다른분은 다 아시고 계신건가요? -0-;;
== Mini sample 1 ==
<div id="view1"></div>
<script type="text/javascript">
$(function(){
$('#view1').csv2table('./data/Book12.csv');
});
</script>
// Damn pesky carriage returns...
$text = str_replace("\r\n", "\n", $text);
$text = str_replace("\r", "\n", $text);
// JSON requires new line characters be escaped
$text = str_replace("\n", "\\n", $text);
return $text;
}
var email1 = $("#email1").val();
var email2 = $("#email2").val();
var email_ch = email1 + "@" + email2;
if(email_ch.match(/\w+[/\w.]*@[/\w.]+\.\w+/)) {
이메일이 맞을경우...
}
}
찾아봐도 없어서 간단히 만들어봤습니다.
제가 사용하려고 만든거라 정리되지 않았는데...
쉬운 소스이니 변형하셔서 사용하셔여~.~
alert("오른쪽마우스금지입니다.");
return false;
});
UltimateDefrag는 여러 가지 옵션을 통해 보다 효과적인 조각모음이 가능하도록 제작된 조각모음 프로그램입니다.
UltimateDefrag 특징
다양한 방법으로 조각모음 수행
Fragmented files only
- 조각난 파일만 조각모음 해주는 단순 조각모음 기능
- 빠른 조각모음이 가능하나 데이터 사이에 빈 공간이 남아 비효율적
Consolidate (중급 사용자 및 효과적인 조각모음에 적합)
- 효과적인 조각모음 수행
- 옵션을 사용하여 효과적인 데이터 재배치로 조각모음 효과 극대화
: 자주 사용하는 파일 디스크 바깥족에 배치, 압축 파일은 디스크 안쪽에 배치
Folder/File name
- 폴더 이름 순으로 정렬한 뒤 각 폴더의 파일을 파일 이름 순으로 정렬하여 조각모음
Recency (고급 사용자 및 최상의 조각모음에 적합)
- 옵션 선택에 따라 조각모음 효과 극대화 가능
- 서버나 일반 PC 중 하드디스크의 빈공간이 여유롭지 않은 경우 추천
Auto (초보 사용자 및 빠르고 효과적인 조각모음에 적합)
- OptiSeek 기술을 이용한 자동 조각모음 기능
- 자동으로 데이터를 분석하여 트랙 바깥쪽과 안쪽으로 분배하여 조각모음 수행
조작법 난이도 : 쉬움
한글 메뉴 : 지원안함
UltimateDefrag는 자주 사용하지 않는 파일 및 폴더, 압축 파일을 디스크 안쪽에 배치시키고 자주 사용하는 파일 및 폴더를 디스크 바깥쪽에 배치시키는 방법으로
조각모음의 효과를 극대화하고 효과적인 디스크 사용이 가능하게 해줍니다.
UltimateDefrag가 제공하는 조각모음 방법 중 Fragmented files only와 Auto를 제외한 3 가지 조각모음 방법(Consoldate, Folder/File name, Recency)은 옵션 조정을
통한 독특한 조각모음 방법으로 효과적인 조각모음을 할 수 있습니다.
UltimateDefrag의 조각모음 옵션 중,
Consoldate, Folder/File name, Recency 공통옵션인,
Respect High Performance : 자주 사용하는 파일을 바깥쪽 트랙에 위치시킴
Respect Archive : 자주 사용하는 압축 파일을 바깥쪽 트랙에 위치시킴
Put Directories adjacent to the MFT : 디렉토리(폴더)를 MFT 근처에 위치 - MFT와 디렉토리 간 소통이 많기 때문에 디렉토리를 MFT(Master File Table) 근처에 위치시키면 검색 시간을 단축시켜줌
을 사용함으로 하면 조각모음 효과가 극대화 됩니다. 단, Recency에서는 상기 공통 옵션을 굳이 사용하지 않아도 효과적인 조각모음이 가능합니다.
Recency의 경우 마지막 접근 또는 수정한 데이터를 기준으로 오래된 데이터를 디스크 안쪽에 배치시키거나 신규 데이터를 디스크 바깥쪽에 배치시켜 조각모음의 효과를 극대화하고 디스크 접근성을 높여줍니다.
UltimateDefrag를 사용할 때,
최초 조각모음 시, Recency로 전체 데이터 재배치 및 조각모음하거나 Consolidate로 조각모음 수행
정기적인 조각모음은 Auto로 수행하면 효과적인 조각모음이 가능합니다.
메모창도 뜨는 설정도 있어요.
사랑해요.wav, 안녕 친구들.wav , 안녕!.wav ,안녕히 가세요.wav
기타 등등 이런 음성 파일입니다. 어떤 용도로 쓰는지 별도 설명 드리지 않겠습니다.
출처 : 네이버 - http://news.search.naver.com/search.naver?where=news&sm=tab_jum&query=%uC624%uD508%uCF54%uB9AC%uC544%20%uAE40%uC601%uC0BC 다 음 - http://search.daum.net/search?w=news&q=%EC%98%A4%ED%94%88%EC%BD%94%EB%A6%AC%EC%95%84%20%EA%B9%80%EC%98%81%EC%82%BC&enc=utf8&nil_search=btn '국내 최고' 넘어 세계시장 목표 | ||||||
[향토기업을 찾아서] ⑫ (주)오픈코리아 | ||||||
| ||||||
지난 2008년 리먼사태로 촉발된 경제침체 이후 좀처럼 국내 경기가 활력을 되찾지 못하고 있다. 수원지역도 마찬가지다. 기업과 시민이 힘을 합쳐 지역경제 활성화를 위한 방안을 모색해야 할 것이다. 이에 본지는 지역경제를 위해 발 빠르게 움직이고 있는 ‘수원의 향토기업’을 응원하기 위해 연속 기획시리즈를 마련했다. 오늘은 열두 번째 순서로 기술 집중형 IT기업 ‘오픈코리아’를 소개한다. [편집자 주] “인터넷 홈페이지, 아티보드를 사용하면 언제 어디서나 누구든 손쉽게 만들 수 있습니다. 일반인들은 무료로 이용할 수 있습니다.”
특히 모든 기능을 포함한 프로그램을 무료로 배포하고 있기 때문에 그 인기는 하늘을 높은줄 모르고 치솟고 있다. 무료로 배포한다고 하지만 ▲빠른 속도 ▲강력한 관리자 모듈 ▲지속적 업데이트 ▲다양한 부가기능·스킨 제공 등으로 인해 최강의 웹사이트 구축 솔루션이라는 평가다. ‘행정중심복합도시디자인·세종시’ 홈페이지를 비롯해 ‘광교신도시 공원디자인공모’, ‘국토지리학회’ 등 관공서는 물론이고 대기업 웹사이트까지 아티보드를 이용해 제작된 홈페이지는 무수히 많다. 모두가 인정하고 있는 아티보드의 장점은 다양하지만 최고 장점이라 하면 바로 빠른 실행속도를 꼽을 수 있다. 자체 개발한 ‘웹 해킹 방지 보안시스템’을 탑재했지만, 복잡한 SQL을 단순화 시키고, 적절한 절차를 기본적으로 수행하기 때문에 빠른 성능을 자랑한다. 아티보드를 개발·공급하고 있는 오픈코리아(대표 김영삼·수원시 팔달구 우만동 549-10 아석빌딩 3층)는 웹사이트와 인터넷 쇼핑몰, 보안솔루션, 커뮤니티 등 온라인상의 모든 솔루션을 기획·개발하고 있다. 지난 8년 동안 축적한 기술과 노하우를 보유하고 있으며, 연 매출의 60%를 매년 R&D에 투자하는 등 국내 정상을 목표로 질주하고 있다. 김영삼 오픈코리아 대표는 “웹 에이전시, e비즈니스, 네트워크시스템 등 다양한 사업을 통해 쌓인 노하우를 바탕으로 유기적인 환경을 설계·구축함으로써 앞으로 어떠한 컨텐츠 개발에 있어서도 최고의 결과물을 만들 준비가 돼 있다”고 강조했다 한편 김 대표의 이력은 참 독특하다. 국내에서 알아주는 해킹 커뮤니티인 해커스쿨을 처음 만든이가 바로 김 대표다. 이 후 실력을 인정받아 삼성SDS에서 근무하던 그는 2년만에 돌연 사직서를 제출하고 오픈코리아를 설립한다. 김 대표는 “회사를 그만둔다고 했을 때 주위사람 모두가 미쳤다고 퇴사를 만류했지만 나만의 프로그램을 개발하고 싶다는 꿈을 져버릴 수 없어 과감히 사직서를 던졌다”고 설명했다. 김 대표는 “앞으로 국내 최고의 솔루션을 개발하고, 나아가 세계 시장을 목표로 하는 기업으로 오픈코리아를 성장시키고 싶다”며 포부를 밝히고 “윈도에서 제공하거나 개인적으로 사용하는 방화벽을 사용하지 않으면 누구라도 해킹을 할 수 있으니 반드시 사용해야 한다”고 보안 솔루션 전문가로서 당부했다. |
var imgs = new Array(); // 배열 Object
function getimagesize(url)
{
if ( typeof(imgs[url])=="undefined" || !imgs[url].complete ) { // 정의되지 않았거나 로딩되지 않은 경우
imgs[url] = new Image(); // 이미지 Object
imgs[url].src = url; // 이미지 지정
setTimeout("getimagesize('"+url+"')",100); // 0.1초 후 재귀 호출
} else {
alert("W:"+imgs[url].width+"/H:"+imgs[url].height); // 크기 띄우기
}
}
</script>
<input type="button" value="LOGO" onclick="getimagesize('http://phpschool.com/images/top_logo.gif');" />
<input type="button" value="Q/A" onclick="getimagesize('http://phpschool.com/title_image/sub_qna_title.gif');" />
예외 처리가 빈약한 기본 코드입니다.
살은 직접 붙여보세요.
먼저 알아야 할 것은 날짜 및 랜덤 관련 함수입니다.
UNIX_TIMESTAMP() 함수를 이용해 Timestamp를 구할 수 있죠?
아래의 예를 보세요.
SELECT UNIX_TIMESTAMP('2010-01-01 00:00:00');
UNIX_TIMESTAMP('2010-01-01 00:00:00') |
1262271600 |
SELECT UNIX_TIMESTAMP('2010-02-04 00:00:00'); // 1초 더함. 이유는 아래
UNIX_TIMESTAMP('2010-02-04 00:00:00') |
1265209200 |
저 수치 사이의 값을 구하면 되겠죠?
이때 필요한 것이 RAND() 함수입니다.
이 함수로 0 이상, 1 미만의 부동 소수점 값을 구할 수있습니다. (0 ≤ n < 1) 이유!
SELECT RAND();
RAND() |
0.298790559450901 |
정수 형태로 하려면 FLOOR() 함수를 사용해주면 됩니다.
예를 들어 1 이상 10 미만의 정수를 반환받고자 한다면 아래처럼 하면 됩니다.
SELECT FLOOR(1+RAND()*(10-1));
FLOOR(1+RAND()*(10-1)) |
3 |
지금까지의 함수를 통해 두 값 사이의 임의의 수(Timestamp)를 생성할 수 있겠죠?
그렇게 생성된 Timestamp 값을 FROM_UNIXTIME() 함수를 이용해 '년-월-일 시:분:초' 형태로 구할 수 있습니다.
최종적으로 아래 명령으로 구할 수 있습니다.
SELECT FROM_UNIXTIME(FLOOR(unix_timestamp('2010-01-01 00:00:00')+(RAND()*(unix_timestamp('2010-02-04 00:00:00')-unix_timestamp('2010-01-01 00:00:00')))));
FROM_UNIXTIME(FLOOR(unix_timestamp('2010-01-01 00:00:00')+(RAND()*(unix_timestamp('2010-02-04 00:00:00')-unix_timestamp('2010-01-01 00:00:00'))))) |
2010-01-21 23:37:01 |
Timestamp값을 그대로 넣으려면 FROM_UNIXTIME() 함수가 필요없겠죠?
년-월-일 또는 시간 등 필요한 문장으로 입력하려면 DATE_FORMAT() 함수를 사용하면 됩니다.
분명히 설정대로했는데…. 도움말 찾아보니 내용이 다르더군요.
http://mail.google.com/support/bin/answer.py?answer=77659
http://mail.google.com/support/bin/answer.py?answer=76147 <= 이 내용대로 하니 되더군요.
개발환경 : 자바스크립트
사용제한 : MIT Style(jqGrid 라이센스에 따름)
제작자 : 컴포지트
자료설명 :
jqGrid 3.5 기준으로 작성되었습니다.
MIT 라이센스에 따라 배포 및 수정이 자유롭게 적용됩니다.
실무에서 jqGrid를 사용하기 위해 번역했습니다.
혹시라도 번역이 안된 부분이나 오역이 발생할 수도 있으니 양해 바랍니다.
(되도록 모두 한글화하도록 노력하였습니다.)
jqGrid 스크립트 파일을 불러오기 전에 이 파일을 넣어주시면 됩니다.
jqGrid 폴더에 i18n 폴더가 있는데 거기가 여러 번역 스크립트가 있는 곳입니다.
그곳에 살포시 넣어주시면됩니다.
UTF-8로 인코딩 하였으니 다른 인코딩에도 별 무리는 없을 것입니다.
만약 한글이 깨진다면 스크립트 태그에 charset='utf-8' 을 추가해주면 될겁니다.
자바스크립트 특성상 아스키 문자 외엔 모두 유니코드로 취급하니 한글 인코딩에
조금만 신경써준다면 한글이 깨지는 일은 없을 겁니다.
한글은 영어 문자보다 클 수 있기 때문에 Grid 레이아웃이 깨지는 경우가 있습니다.
가능하면 DOCTYPE를 명시해 주시고(HTML 종류 상관없음), 인코딩 메타태그를 넣어주세요.
그러면 레이아웃이 깨지는 일은 없을 것입니다.