'분류 전체보기'에 해당되는 글 223건

  1. 2011.10.07 Firefox 이벤트 객체의 srcElement 참조하기
  2. 2011.10.07 크롬 최신버전 14.0.835.202 for Chrome Stable 다운로드 직링크(11.10.07)
  3. 2011.10.05 Jetty Scanner 를 이용한 특정 디렉토리 및 파일 변경사항(delete, change, add) 모니터링하기
  4. 2011.10.05 Cron 표현식 생성해 주는 사이트(Cron Maker)
  5. 2011.10.04 MySQL 테이블명 대소문자 구분안하기

Firefox 이벤트 객체의 srcElement 참조하기

IE나 크롬 기타등등 브라우져의 이벤트 객체에는 srcElement 프로퍼티가 있어서 이벤트가 발생한 엘리먼트가 어떤 엘리먼트인지 알 수 있다.

그런데 Firefox 에는 srcElement 프로퍼티가 없어서, 별다른 처리를 해 주지 않으면 스크립트 에러가 발생한다.


Firefox 의 이벤트 객체에는 srcElement 프로퍼티가 대신 target 프로퍼티가 있다.

srcElement 프로퍼티를 이용한 부분을 요렇게 바꾸면 모든 브라우져에서 스크립트 에러 없이 원하는 일을 할 수 있다.
function eventHandler(e){
	var el = e.srcElement ? e.srcElement : e.target;

	// el.tagName ......
}


간단한 응용 : 어떤 태그가 클릭됬는지 가져오기
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
	
	<script>
		function eventHandler(e){
			var el = e.srcElement ? e.srcElement : e.target;
			alert("클릭한 태그이름 : " + el.tagName);
		}
		document.onclick = eventHandler;
	</script>
</head>
<body>
	<h1>헤더1</h1>
	<h2>헤더2</h2>
</body>
</html>

크롬 최신버전 14.0.835.202 for Chrome Stable 다운로드 직링크(11.10.07)

Jetty Scanner 를 이용한 특정 디렉토리 및 파일 변경사항(delete, change, add) 모니터링하기

maven jetty plugin 옵션 중에 scanIntervalSeconds 라는 옵션을 줘서 파일이 변경됬을 경우 일정시간 마다 서버를 리스타트 하는 기능이 있다.


이것과 비슷하게 지정된 특정 디렉토리에 파일이나 디렉토리가 생성, 삭제, 변경 되는 것을 모니터링 하는 클래스를 맨들어 보았다.


이것을 위해서 Jetty util 패키지에 있는 Scanner 클래스를 사용했다.

maven 사용자는 다음과 같은 dependency 를 추가하면 되고
<dependency>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-util</artifactId>
	<version>8.0.1.v20110908</version>
</dependency>


maven 사용안하는 사람은 jetty-util-8.0.1.v20110908.jar 요파일을 클래스 패스에 추가 시켜 주면 된다.

jetty-util-8.0.1.v20110908.jar



FileChangeScanner 클래스는 다음과 같다. DiscreteListener 클래스의 각각의 경우에 대해서 원하는 엑션을 취해주면 된다.
package scanner;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.eclipse.jetty.util.Scanner;

public class FileChangeScanner {
	private Scanner scanner;

	public FileChangeScanner(String targetDir){
		List<File> scanFiles = new ArrayList<File>();
		
		searchSubDirs(targetDir, scanFiles);
		
		scanner = new Scanner();
		scanner.setScanInterval(1);          // 1초 간격으로 변경사항 스캔
		scanner.setScanDirs(scanFiles);
		scanner.setReportExistingFilesOnStartup(false);
		
		scanner.addListener(new Scanner.DiscreteListener() {
			public void fileRemoved(String filename) throws Exception {
				System.out.println(filename + " is deleted");
			}
			
			public void fileChanged(String filename) throws Exception {
				System.out.println(filename + " is changed");
			}
			
			public void fileAdded(String filename) throws Exception {
				File f = new File(filename);
				if(f.isDirectory()) scanner.addScanDir(f);
				
				System.out.println(filename + " is added");
			}
		});
	}
	
	public void start(){
		try {
			scanner.start();
		} catch (Exception e) {
			new RuntimeException(e);
		}
	}
	
	/**
	 * 하위 디렉토리들 찾기
	 * @param targetDir
	 * @param dirs
	 * @return
	 */
	private List<File> searchSubDirs(String targetDir, final List<File> dirs){
		File target = new File(targetDir);
		target.listFiles(new FileFilter() {
			public boolean accept(File file) {
				if( file.isDirectory() ) {
					dirs.add(file);
					searchSubDirs(file.toString(), dirs);
				}
				return false;
			}
		});
		
		return dirs;
	}

	public static void main(String[] args) throws Exception{
		// c:\test 하위 폴더 및 파일 변경 감시
		new FileChangeScanner("c:\\test").start();
		
		// 실행하자 마자 프로그램이 종료되기 때문에 프로그램 종료방지를 위해 타이머 생성
		// WAS 환경에서 돌릴때는 타이머 생성할 필요없음
		Timer timer = new Timer();
		timer.scheduleAtFixedRate(new TimerTask() {
			public void run() {}
		}, 60*1000, 60*1000 );
	}
}


Cron 표현식 생성해 주는 사이트(Cron Maker)


http://www.cronmaker.com/


Cron 표현식이 별로 어렵진 않아서 그냥 대충 이해한 다음에 표현식을 맨들면 되지만

요 사이트를 이용하면 몇가지 옵션 선택후 Generate Cron Expression 버튼을 클릭하면 해당되는 크론 표현식을 간편하게 생성하고 언제 실행될 것인지 미리볼 수 있다.



그리고 또 마음에 드는 기능은 내가 만든 크론 표현식을 입력하고 Calcurate  next dates 버튼을 클릭하면

내가 만든 크론 표현식으로 언제 실행될것인지 미리 볼수 있는 기능도 좋은것 같다. 

MySQL 테이블명 대소문자 구분안하기

윈도우에서는 MySQL 설치 디렉토리\my.inf 파일을 수정하면 되고

리눅스 같은거에서는 /etc/my.cnf 파일을 수정하면 된다.


아무튼 my.xxx 파일을 열어보면

[mysqld]  요부분이 있을건데

[mysqld] 아래쪽에
lower_case_table_names=1
를 추가하고 MySQL 을 리스타트 하면

SELECT * FROM TEST; 
SELECT * FROM test;

둘다 에러없이 실행된다. 

※ 데이터베이스나 테이블을 생성할때 디비명과 테이블명은 "소문자" 로 생성해야 한다. 
※  lower_case_table_names=1 요 옵션의 의미가 명령어가 대문자로 들어오던 소문자로 들어오던 명령어를 소문자로 바꿔서 실행하게 하는 옵션인듯하다.
prev 1 ··· 30 31 32 33 34 35 36 ··· 45 next