import java.io.File;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Test {

    public static void main(String[] args) {
  // 방법1
  Image img = new ImageIcon(이미지경로).getImage();
  System.out.println( img.getWidth(null) + "," + img.getHeight(null) );

 

  // 방법2
  try
  {
   File file = new File(이미지경로);
   BufferedImage bi = ImageIO.read( file );
   System.out.println( bi.getWidth() + "," + bi.getHeight() );
  } catch( Exception e ) {
   System.out.println("이미지 파일이 아닙니다.");
  }
    }
}

 

Image 를 쓰는 방법과 BufferedImage 를 쓰는 방법이 있는데

둘다 결과는 똑같지만 후자를 쓰는 이유는...

JSP에서 전자를 쓰면 이미지 파일이 아닌 파일(avi나 exe 같은)은 한동안 파일 락이 걸려서

삭제나 이동이 불가하였고 flush 도 해봤지만 똑같은 증상이 발생하였습니다.

반면 후자는 아무 문제 없었습니다. JAVA 로 실행시에는 문제가 발생하진 않습니다.

문제의 원인과 해결 방법을 아시는 분은 댓글 부탁드립니다.

'Dev > JAVA' 카테고리의 다른 글

Spring framework 설치  (0) 2012.11.25
자바 데몬(daemon) 만들기  (0) 2011.06.09
Java Simple Daemon  (0) 2011.06.05
자바 이미지 리사이즈(썸네일)  (0) 2011.04.06
이미지 파일 첨부할 때 이미지 미리보기 기능을 구현하다가 막혀서 구글링 중에 찾은 포스팅인데
더 수정할 필요 없이 바로 사용해도 무리없는 소스를 발견하여 스크랩하여 둔다.

<html>
<head>
    <title></title>
    <style type="text/css">
        .preView { width: 70px; height: 70px; text-align: center; border:1px solid silver; }
    </style>
    <script type="text/javascript">

        function fileUploadPreview(thisObj, preViewer) {
            if(!/(\.gif|\.jpg|\.jpeg|\.png)$/i.test(thisObj.value)) {
                alert("이미지 형식의 파일을 선택하십시오");
                return;
            }

            preViewer = (typeof(preViewer) == "object") ? preViewer : document.getElementById(preViewer);
            var ua = window.navigator.userAgent;

            if (ua.indexOf("MSIE") > -1) {
                var img_path = "";
                if (thisObj.value.indexOf("\\fakepath\\") < 0) {
                    img_path = thisObj.value;
                } else {
                    thisObj.select();
                    var selectionRange = document.selection.createRange();
                    img_path = selectionRange.text.toString();
                    thisObj.blur();
                }
                preViewer.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fi" + "le://" + img_path + "', sizingMethod='scale')";
            } else {
                preViewer.innerHTML = "";
                var W = preViewer.offsetWidth;
                var H = preViewer.offsetHeight;
                var tmpImage = document.createElement("img");
                preViewer.appendChild(tmpImage);

                tmpImage.onerror = function () {
                    return preViewer.innerHTML = "";
                }

                tmpImage.onload = function () {
                    if (this.width > W) {
                        this.height = this.height / (this.width / W);
                        this.width = W;
                    }
                    if (this.height > H) {
                        this.width = this.width / (this.height / H);
                        this.height = H;
                    }
                }
                if (ua.indexOf("Firefox/3") > -1) {
                    var picData = thisObj.files.item(0).getAsDataURL();
                    tmpImage.src = picData;
                } else {
                    tmpImage.src = "file://" + thisObj.value;
                }
            }
        }

    </script>
</head>
<body>
    <input id="fileData" name="fileData" type="file" onchange="fileUploadPreview(this, 'preView')" />
    <div id="preView" class="preView" title="이미지미리보기"></div>
</body>
</html>

출처 : Junyong's blog - http://junyong.pe.kr/98

'Dev > Javascript' 카테고리의 다른 글

Prototype에서 jQuery로 옮겨타기  (0) 2011.07.31
Firebug의 console 파헤치기.  (0) 2011.07.19
fireBug 사용법  (0) 2011.07.19
[jQuery] firebug로 디버그  (0) 2011.07.19
Javascript 배열 메서드  (0) 2011.04.29

GNU screen

이전위키에 있던 내용을 옮겨왔다.
tmux 도 한번 써보고 싶은데 당장 급해서 일단 screen 쓰다가 옮겨놓은것.


관련링크

외워둘만한명령들

  • 도움말은 C-a ?
  • screen 상태에서 C-a C-d 로 디태치, screen -ls 로 세션들을 확인하고 screen -r 세션이름 을 통해 resume
  • 만약 디태치를 하는것을 깜박하고 장비앞을 떠났다면 screen -d 를 통해서 screen 세션 외부에서 디태치 가능
  • 로깅이 필요하면 C-a H 현 한화면만 잡으려면 C-a h
  • 새 창을 열려면 C-a c 또는 screen 안에서 screen vi 등으로 실행
  • 창간의 전환은 C-a C-a, C-a n, C-a C-p, 등으로 앞뒤로 움직이거나 C-a " 로 리스팅해서 전환 또는 C-a 숫자 로 전환
  • C-a 를 프로세스에 보내려면 C-a a
  • 브레이크를 보내려면 C-a C-b
  • clear 하려면 C-a C
  • 현재 창의 정보는 C-a i
  • 리플레시하려면 C-a l
  • 창을 나누려면 C-a S 나뉜 창간에 포커스 이동은 C-a TAB 현재창만 남기려면 C-a Q 현재창을 닫으려면 C-a X
  • copy 하려면 C-a [ paste 하려면 C-a ] 이쪽은 좀 복잡한 기능들이 많이 붙어있다.
이외에도 존내 많은 기능과 바인딩들이 있다. C-a 때문에 emacs 와 바인딩이 겹치는게 좀 피곤해서 잘 안쓰지만 외부장비에 접속했을경우엔 아주 도움되는 유틸리티.

.screenrc

http://gentoo-wiki.com/TIP_Using_screen 에서 따왔다.

startup_message off
hardstatus alwayslastline                                                                                                                        
hardstatus string '%{gk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]%{=b C}[ %m/%d %c ]%{W}'

'OS > LINUX' 카테고리의 다른 글

YUM 사용법  (0) 2011.05.13
vi 사용하기  (0) 2011.05.03
/etc/sysconfig/i18n - 시스템의 한글 깨짐 문제 해결  (0) 2011.04.23
cut  (0) 2011.04.15
xargs  (0) 2011.04.15

/etc/sysconfig/i18n - 시스템의 한글 깨짐 문제 해결

 

시스템를 사용하다보면 한글을 인식하지 못해 한글 깨짐현상이 발생할 수 있는데, 이는 시스템에서 한글설정이 되어 있지 않기 때문이며 제어판 파일을 간단히 설정함으로써 해결할 수 있다.

 

아래 예를 보면서 설명하겠다.

[root@inter-devel yswon]# ll
total 64
drwxr-xr-x  2 yswon yswon  4096 Sep 17  2008 ftp
drwxr-xr-x  2 yswon yswon  4096 Sep 17  2008 ftp_log
drwxr-xr-x  2 root  root   4096 Oct 12 17:32 script
-rw-r--r--  1 root  root  13346 Feb  6  2009 temp.txt
drwxr-xr-x  3 yswon yswon  4096 Sep 17  2008 www
drwxr-xr-x  2 yswon yswon  4096 Sep 17  2008 www_log
-rw-r--r--  1 root  root      0 Oct 22 14:23 ????????.txt
[root@inter-devel yswon]#

 

위의 예에서 영문 파일명은 잘 보이지만 한글파일명은 ?등과 같은 깨진 상태로 보인다. 이것은 리눅스 제어판(/etc/sysconfig 디렉토리내에서 설정함)에서 한글코드 설정이 되어있지 않기 때문이다.

 

이 문제는 /etc/sysconfig/i18n 파일의 설정 부분을 변경하면 된다.

현재는 아래와 같이 설정되어 있을 것이다.

LANG="en_us.UTF-8"
SUPPORTED="ko_KR.UTF-8:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"

즉, 보시는 바와 같이 'en_us.UTF-8"로 되어 있으며 영문자만 인식할 수 있다. 

 

따라서 한글을 인식하려면 아래와 같이 설정값을 변경해야 한다.

LANG="ko_KR.eucKR"
SUPPORTED="ko_KR.UTF-8:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"

 

즉, LANG행을 "ko_KR.eucKR"로 설정해야 한다.

그리고, 로그아웃한 다음 다시 로그인하게 되면 한글깨짐 문제를 해결할 수 있다.

 

이제 다시 확인해 보면 한글파일명이 제대로 보인다는 것을 알 수 있다.

[root@inter-devel yswon]# ll

합계 64
drwxr-xr-x  2 yswon yswon  4096  9월 17  2008 ftp
drwxr-xr-x  2 yswon yswon  4096  9월 17  2008 ftp_log
drwxr-xr-x  2 root  root   4096 10월 12 17:32 script
-rw-r--r--  1 root  root  13346  2월  6  2009 temp.txt
drwxr-xr-x  3 yswon yswon  4096  9월 17  2008 www
drwxr-xr-x  2 yswon yswon  4096  9월 17  2008 www_log
-rw-r--r--  1 root  root      0 10월 22 14:23 한글파일.txt
[root@inter-devel yswon]#


'OS > LINUX' 카테고리의 다른 글

YUM 사용법  (0) 2011.05.13
vi 사용하기  (0) 2011.05.03
GNU screen  (0) 2011.04.23
cut  (0) 2011.04.15
xargs  (0) 2011.04.15
윈도우는 멀티스레드 방식
리눅스는 멀티프로세스 방식

멀티스레드 환경에는 Non Thread Safe 버전
멀티프로세스 환경에는 Thread Safe 버전

MPM prefork는 멀티프로세스
MPM worker는 멀티스레드

스레드 안전 - 멀티스레드 환경하에 하나의 자원에 여러 스레드가 동시에 접근해도 프로그램의 실행에 문제가 없음을 뜻함

Windows + IIS(ISAPI) : VC9 Thread Safe 버전
Windows + IIS(CGI + FastCGI) : VC9 Non Thread Safe 버전
Windows + 아파치(MPM worker) : VC6 Thread Safe 버전
Windows + 아파치(MPM prefork) : VC6 Non Thread Safe 버전

'Dev > PHP' 카테고리의 다른 글

FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13
PHP 암호화 함수정리  (0) 2011.05.07
upload_max_filesize  (0) 2011.04.19

MPM : Multi-Processing Modules, MPMs (다중 처리 모듈)

- 여러 방식이 존재하지만, 대표적으로 Prefork 와 Worker 방식을 많이 사용함.

Prefork

- 쓰레드가 한개의 자식 프로세스를 여러개 사용하며 각 프로세스는 한번에 한 연결을 담당

- worker보다 좀 더 많은 메모리를 사용함

- 프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적임

 

 

 

 

 

 

설정 예
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>


옵션 설명
StartServer
아파치 구동시에 자식 프로세스 개수 지정

MinSpareServersMaxSpareServers
부하가 적어서 MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 유지하려고 아파치가 노력하고
부하가 증가하여 프로세스 개수가 많아질 경우에 MaxSpareServers 개수 이하로 줄이려고 아파치는 노력한다.
즉, 절대적인 수치가 아니다.

MaxClient
초기 시작시 실행가능한 최대 아파치 자식 프로세스의 개수를 지정
*worker방식의 MaxClient 와는 전혀 다른 의미임.

MaxReqeustPerChild
클라이언트들의 요청 개수를 제한. 만약 자식 프로세스가 이 값만큼의 클라이언트 요청을 받았다면 이 자식 프로세스는 자동으로 죽게 된다. 0 일 경우엔 무한대

 

 

 

 

Worker

- 자식 프로세스들이 각각 여러 쓰레드를 사용하며, 각 쓰레드는 한번에 한 연결을 담당

- Prefork보다 메모리 사용량이 적음. 통신량이 많은 서버에 적절

- 쓰레드 간에 메모리 공간을 공유함. 리소스 경합이 발생하지 않도록 주의 필요.

 

 

 

 

설정 예
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

   

옵션 설명
StartServers
시작시에 생성되는 서버 프로세스의 개수

MaxClient
동시 연결가능한 클라이언트의 최대 개수.

MinSpareThreads
최소 thread 개수

MaxSpareThreads
최대 thread개수

ThreadPerChild
개별 자식 프로세스가 지속적으로 가질 수 있는 Thread의 개수

MaxRequestPerChild
자식 프로세스가 서비스할 수 있는 최대 요청 개수

 

 

 

 

 

 

* 확장성이 필요한 사이트는 worker방식을 택하고, 안정성과 오래된 소프트웨어와 호환성이 필요한 사이트는 Prefork를 사용하기도 한다.

* Linux의 경우, Prefork 방식이 Default이며, Worker방식을 사용하기 위해서는 설치시에 -with-mpm=worker 옵션을 주어야 한다.

  ex) ./configure --prefix=/home/paint/apache-2.2.15 --enable-mods-shared=all --enable-module=so --enable-so  --with-mpm=worker

Posted by 빼인트

어제 작업한 업로드 크기가 잘못되었다구 한다. 젠장 .

session.gc_maxlifetime = 3600
upload_max_filesize = 8M
post_max_size = 8M
memory_limit = 8M

다음과 같이 변경을 해주면 되는것 같다.  

위에서  session.gc_maxlifetime =3600  은 세션에 관한 사항이다.

http 프로토콜에 post메서드는 스트림을 따로 만들기때문에 큰 파일을 전송할때 사용합니다.

php에서 post_max_size라 함은 그 post data 의 최대 사이즈를 선언하는것이고,

upload_max_filesize 는 말그대로 업로드할 파일 최대 사이즈를 선언하는것입니다.

 

파일과 함께 기타 다른 테이터들이 전송되므로

upload_max_filesize  보다 post_max_size가 더 크게 선언되야합니다.

 

아마  max_filesize 가 1 mb고 post_max_size가 9mb면 1mb크기의 4~5개 파일을 한번에 폼전송으로 할수 있을거라 봅니다.

[출처] upload_max_filesize|작성자 엑스라인

'Dev > PHP' 카테고리의 다른 글

FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13
PHP 암호화 함수정리  (0) 2011.05.07
[PHP] Thread safe / non Thread safe  (2) 2011.04.19

웹개발을 하다 보면 IE의 여러 버전에서 보이는 화면이 달라서 고생할 때가 많습니다.

IE 외 다른 브라우저의 크로스브라우징 테스트는 각 프로그램을 설치하면 되지만,

IE는 한가지 버전만 설치가 가능하기 때문에 6, 7, 8 버전의 테스트를 같이 하기가 힘듭니다.


이걸 가능하게 해주는 툴이 몇가지 있네요.

여러 버전의 IE를 돌릴 수 있도록 하는 방법을 소개해 드립니다.




1. 무설치 버전


말 그대로 설치작업 없이 사용가능한 방법입니다.

정상적으로 상위버전의 IE를 설치하면 하위버전을 사용할 수 없으므로,

설치하지 않고 그냥 사용할 수 있도록 만들어진 패키지를 사용하시면 됩니다.

(MS 에서 직접 제작된 버전은 아닙니다.)


IE6 StandAlone 버전은 http://browsers.evolt.org/?ie/win32/standalone 에서

ie6eolas_nt.zip 을 다운받아 적당한 폴더에 압축을 푸신 다음

iexplore.exe 를 실행하시면 IE6를 실행시킬 수 있습니다.

여기서 IE3부터 IE5 까지도 다운받을 수 있습니다.


IE7 StandAlole 은 MS에서 IE7 을 아래 링크를 통해 다운받고 커맨드창에서

IE7-WindowsXP-x86-kor.exe /x

명령어를 실행시켜 적당한 폴더에 압축을 푼 다음

압축을 푼 폴더 안에 있는 update 폴더에 들어가셔서 xmllitesetup.exe 를 실행시키시고,

http://tredosoft.com/IE7_standalone 에서 IE7s를 다운받아 (아래 링크 참조)

위에서 IE7을 압축푼 폴더와 동일한 폴더에 압축을 푼 뒤에 IE7s.exe 를 실행시키면 됩니다.


IE6 Standalone 다운로드

IE7 한국어판(XP 32bit) 다운로드

IE7S 다운로드





2. 에뮬레이터


다른 버전의 IE를 가상으로 구동하는 방식입니다. 각 프로그램을 설치하고 사용하시면 됩니다.



1) Multiple IEs (http://tredosoft.com/multiple_IEs)


가장 많은 사람들이 쓰고 있는 것 같습니다.

그런데 IE 1 부터 6 까지만 에뮬레이팅 해줍니다.

7을 쓰고 있는 사람들이 6을 테스트하긴 좋지만, 6을 쓰고 있는 사람에게는 무용지물인 툴입니다.

그리고 비스타를 지원하지 않습니다.



2) Internet Explorer Collection (http://finalbuilds.edskes.net/iecollection.htm)


IE 6,7,8 을 모두 지원하고, 비스타에서도 정상적으로 돌아갑니다.

거기에 IE Developer Toolbar 도 같이 설치되는 것 같습니다.

현재 제가 개발 테스트때 사용하고 있는 프로그램 입니다.

3) IETester (http://www.my-debugbar.com/wiki/IETester/HomePage)


위 두개의 프로그램을 겉모양까지 똑같이 보여주지만,

IETester는 이 프로그램 안에서 여러개의 탭으로 여러 버전의 브라우저 테스트를 할 수 있습니다.

탭으로 여러 버전의 화면을 동시에 띄울 수도 있는 점이 좋습니다.

그리고 메뉴에 한글도 지원됩니다. 비스타도 지원하고 있습니다.

그런데, internet Explorer Collection 에서는 IE7과 똑같은 스크롤을 보여주는데,

IETester는 조금 다르게 보여주는 화면을 딱 하나 발견했습니다;;;



4) Xenocode (http://www.xenocode.com/browsers/)


위 세개는 프로그램을 설치하여 따로 실행시켜서 테스트하는 방식인데,

이 프로그램은 브라우져에서 클릭을 하여 에뮬레이터를 구동하는 방식입니다.

(그 전에 플러그인은 설치해야 합니다.)

샌드박스 위에서 구동되는 방식이라고 합니다.

이건 IE 뿐만 아니라 파이어폭스, 구글 크롬, 오페라, 사파리까지 돌려볼 수 있습니다.




참조 사이트 : http://chatii.textcube.com/24


+ Recent posts