- Helper's high
남을 돕고 난 뒤, 며칠, 몇 주 동안 지속되는 심리적 포만감.
혈압, 콜레스테롤 하락, 엔도르핀 정상치의 3배 이상 상승.
- The Mother Teresa Effect
직접 선행을 하거나 남의 선행을 바라보는 것만드로도 몸의 면역력이 높아지는 효과.
=> 나와 우리 모두를 위해... 움.직.이.자...
DY says...
2016년 1월 25일 월요일
2015년 12월 25일 금요일
2014년 2월 9일 일요일
아현고가도로 (1968-2014)
철거를 앞두고, 마지막으로 걸어볼 수 있는 기회.
집에서 멀지 않은 곳이라 엄마랑 다녀왔습니다.
눈이 왔지만, 많은 분들이 추억을 함께했습니다.
직접 낙서를 할 수 있도록 준비되어 있었고, 전시, 공연도 함께했습니다.
핸드폰이 급방전되어 사진을 3장 뿐이 못 찍은 것이 참 아쉽습니다.
집에서 멀지 않은 곳이라 엄마랑 다녀왔습니다.
눈이 왔지만, 많은 분들이 추억을 함께했습니다.
직접 낙서를 할 수 있도록 준비되어 있었고, 전시, 공연도 함께했습니다.
핸드폰이 급방전되어 사진을 3장 뿐이 못 찍은 것이 참 아쉽습니다.
2014.02.08.
2013년 2월 3일 일요일
Eclipse / MySql / JSP / Tomcat - UTF-8 설정
※ 검색한 내용 확인, 적용하면서 정리해 보았습니다.
server.xml (GET 방식으로 넘길 때 유효하다고 합니다. 추가된 속성은 다음과 같습니다.)
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
- Eclipse
Text file encoding은 UTF-8로, 파일마다 확인.
- MySQL
- JSP
1
2
3
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
- Tomcat
server.xml (GET 방식으로 넘길 때 유효하다고 합니다. 추가된 속성은 다음과 같습니다.)
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
1
2
3
4
|
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
|
1
2
3
4
5
|
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
|
project의 web.xml (filter 등록)
파일마다
1
2
|
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
|
대신
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterconfig = null;
protected boolean ignore = true;
@Override
public void destroy() {
// TODO Auto-generated method stub
this.encoding = null;
this.filterconfig = null;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterconfig) throws ServletException {
// TODO Auto-generated method stub
this.filterconfig = filterconfig;
this.encoding = filterconfig.getInitParameter("encoding");
String value = filterconfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
|
작성 후, project의 web.xml에 등록.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
- 위 내용을 모두 확인, 적용해도 안되고, 혹시 MultipartRequest를 사용하신다면 생성자 encoding 매개변수에 “UTF-8” 넣어 주세요! (저는 이것 때문에 ㅠㅠ)
1 |
MultipartRequest mRequest = new MultipartRequest(request, folderPath, maxByteSize, "UTF-8");
|
대부분의 검색 결과는 방법만 나와 있습니다. 왜 그런지, 위 내용 중 어떤 부분이 설정 되지 않았을 때 어떤 결과를 보여주는지 알기가 힘듭니다. 필터링 부분을 빼 보았는데 한글이 깨졌습니다. 그에 따른 페이지 에러도 발생합니다. 하지만 DB에는 정상적으로 한글이 저장되었습니다.MultipartRequest encoding 설정이 안 된 경우에는, 페이지 에러는 발생되지 않지만, 한글이 깨진 상태로 DB에 저장되었습니다. 시간을 내어 각 경우에 대해 연구를 해야 내공이 강해지겠지요? 일단 위 모든 내용을 적용, 확인하면 될 듯 합니다.
2012년 7월 14일 토요일
Bubble sort
※ 이해가 잘 되지 않는 부분은 위키피디아 원문을 함께 실었습니다.
버블 정렬은 인접한 항목의 각 쌍을 비교하여, 자리를 작업를 반복적으로 수행하는 간단한 정렬 알고리즘입니다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름입니다. 원소의 비교만으로 동작하기 때문에 비교 정렬입니다. 알고리즘은 간단하지만, 크기가 큰 목록을 정렬할 때는 적합하지 않습니다.
성능
원소의 갯수가 n개 일 때, 최악의 경우와 평균 복잡도는 O(n2) 입니다. 최악의 경우나 평균 복잡도가 O(nlogn)인 많은 정렬 알고리즘이 존재합니다. 심지어, 삽입 정렬 같은 복잡도가 O(n2)인 다른 정렬 알고리즘도, 버블 정렬보다 더 나은 성능을 보이는 경향이 있습니다. 따라서, n값이 클 때 버블 정렬은 실용적이지 못한 정렬 알고리즘 입니다.
토끼와 거북이
The positions of the elements in bubble sort will play a large part in determining its performance. Large elements at the beginning of the list do not pose a problem, as they are quickly swapped. Small elements towards the end, however, move to the beginning extremely slowly. This has led to these types of elements being named rabbits and turtles, respectively.
Various efforts have been made to eliminate turtles to improve upon the speed of bubble sort. Cocktail sort is a bi-directional bubble sort that goes from beginning to end, and then reverses itself, going end to beginning. It can move turtles fairly well, but it retains O(n2) worst-case complexity. Comb sort compares elements separated by large gaps, and can move turtles extremely quickly before proceeding to smaller and smaller gaps to smooth out the list. Its average speed is comparable to faster algorithms like quicksort.
버블 정렬에서 원소의 위치는 성능을 결정하는데 큰 역할을 합니다. 목록의 시작점에 큰 원소는 빠르게 순서가 바뀌는 것에 문제가 되지 않습니다. 그러나 끝에 있는 작은 원소는 매우 천천히 처음으로 이동합니다. 이런 형태의 원소에 토끼와 거북이라는 이름이 붙여졌습니다.
버블 정렬의 속도 향상을 위해 거북이를 제거 하기 위한 다양한 시도가 있습니다. 칵테일 정렬은 이런 목표를 꽤 달성 했지만, 최악의 경우 O(n2)의 복잡도를 갖고 있습니다. 빗 정렬은 큰 gap으로 분리된 원소를 비교함으로써, 거북이를 매우 빠르게 이동시킬 수 있습니다. 더 작고 작은 gap으로 부드럽게 진행함으로써, 이 알고리즘의 평균 속도는 더 빠른 알고리즘인 퀵 정렬과 비교할 만 합니다.
Step-by-step example
숫자 배열 "5 1 4 2 8"을 버블 정렬 알고리즘을 사용하여, 가장 작은 숫자부터 가장 큰 숫자 순으로 정렬하는 예제입니다. 각 pass 에서 비교 되어지는 원소는 굵게 적었습니다. 3번의 pass가 필요합니다.
First Pass:
( 5 1 4 2 8 ) → ( 1 5 4 2 8 ), 처음 두 개의 원소를 비교하여 순서를 바꿉니다.
( 1 5 4 2 8 ) → ( 1 4 5 2 8 ), 5 > 4 이므로 순서를 바꿉니다.
( 1 4 5 2 8 ) → ( 1 4 2 5 8 ), 5 > 2 이므로 순서를 바꿉니다.
( 1 4 2 5 8 ) → ( 1 4 2 5 8 ), 8 > 5 정렬되어 있으므로 순서를 바꾸지 않습니다.
Second Pass:
( 1 4 2 5 8 ) → ( 1 4 2 5 8 )
( 1 4 2 5 8 ) → ( 1 2 4 5 8 ), 4 > 2 이므로 순서를 바꿉니다.
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
정렬은 완료되었지만, 알고리즘은 완료 여부를 알 수 없습니다.
순서가 변하지 않는 한 번의 전체 pass를 수행합니다.
Third Pass:
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
구현
버블 정렬은 n번째 pass에서 n번째 큰 요소를 찾아 최종 위치로 이동하는 것을 관찰함으로써 쉽게 최적화 할 수 있습니다. 그러면 내부 루프는 n번 째 실행시 마지막 n-1 번째 원소의 검토를 하지 않아도 됩니다.
보다 일반적으로, 하나 이상의 원소가 단일 pass에서 그들의 최종 위치로 이동할 수 있습니다. 특히 모든 원소의 정렬이 완료된 후에는 다시 검사할 필요가 없습니다. 이것은 많은 원소의 비교를 건너 뛸 수 있고, 결과적으로 최악의 경우 비교 횟수에서 50% 성능이 개선됩니다. (자리 바꿈의 횟수는 그대로입니다.), 새로운 코드는 "swapped" 변수를 포함하여, 복잡도를 개선했습니다.
의사 코드는 다음과 같습니다:
버블 정렬 처럼 인접한 원소를 반복적으로 비교하고, 자리를 바꾸면서 성능을 개선한 대체 알고리즘으로 cocktail shaker sort 등이 있습니다.
출처 : http://en.wikipedia.org/wiki/Bubble_sort 발췌 번역(/w Google 번역)
버블 정렬은 인접한 항목의 각 쌍을 비교하여, 자리를 작업를 반복적으로 수행하는 간단한 정렬 알고리즘입니다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름입니다. 원소의 비교만으로 동작하기 때문에 비교 정렬입니다. 알고리즘은 간단하지만, 크기가 큰 목록을 정렬할 때는 적합하지 않습니다.
성능
원소의 갯수가 n개 일 때, 최악의 경우와 평균 복잡도는 O(n2) 입니다. 최악의 경우나 평균 복잡도가 O(nlogn)인 많은 정렬 알고리즘이 존재합니다. 심지어, 삽입 정렬 같은 복잡도가 O(n2)인 다른 정렬 알고리즘도, 버블 정렬보다 더 나은 성능을 보이는 경향이 있습니다. 따라서, n값이 클 때 버블 정렬은 실용적이지 못한 정렬 알고리즘 입니다.
토끼와 거북이
The positions of the elements in bubble sort will play a large part in determining its performance. Large elements at the beginning of the list do not pose a problem, as they are quickly swapped. Small elements towards the end, however, move to the beginning extremely slowly. This has led to these types of elements being named rabbits and turtles, respectively.
Various efforts have been made to eliminate turtles to improve upon the speed of bubble sort. Cocktail sort is a bi-directional bubble sort that goes from beginning to end, and then reverses itself, going end to beginning. It can move turtles fairly well, but it retains O(n2) worst-case complexity. Comb sort compares elements separated by large gaps, and can move turtles extremely quickly before proceeding to smaller and smaller gaps to smooth out the list. Its average speed is comparable to faster algorithms like quicksort.
버블 정렬에서 원소의 위치는 성능을 결정하는데 큰 역할을 합니다. 목록의 시작점에 큰 원소는 빠르게 순서가 바뀌는 것에 문제가 되지 않습니다. 그러나 끝에 있는 작은 원소는 매우 천천히 처음으로 이동합니다. 이런 형태의 원소에 토끼와 거북이라는 이름이 붙여졌습니다.
버블 정렬의 속도 향상을 위해 거북이를 제거 하기 위한 다양한 시도가 있습니다. 칵테일 정렬은 이런 목표를 꽤 달성 했지만, 최악의 경우 O(n2)의 복잡도를 갖고 있습니다. 빗 정렬은 큰 gap으로 분리된 원소를 비교함으로써, 거북이를 매우 빠르게 이동시킬 수 있습니다. 더 작고 작은 gap으로 부드럽게 진행함으로써, 이 알고리즘의 평균 속도는 더 빠른 알고리즘인 퀵 정렬과 비교할 만 합니다.
Step-by-step example
숫자 배열 "5 1 4 2 8"을 버블 정렬 알고리즘을 사용하여, 가장 작은 숫자부터 가장 큰 숫자 순으로 정렬하는 예제입니다. 각 pass 에서 비교 되어지는 원소는 굵게 적었습니다. 3번의 pass가 필요합니다.
First Pass:
( 5 1 4 2 8 ) → ( 1 5 4 2 8 ), 처음 두 개의 원소를 비교하여 순서를 바꿉니다.
( 1 5 4 2 8 ) → ( 1 4 5 2 8 ), 5 > 4 이므로 순서를 바꿉니다.
( 1 4 5 2 8 ) → ( 1 4 2 5 8 ), 5 > 2 이므로 순서를 바꿉니다.
( 1 4 2 5 8 ) → ( 1 4 2 5 8 ), 8 > 5 정렬되어 있으므로 순서를 바꾸지 않습니다.
Second Pass:
( 1 4 2 5 8 ) → ( 1 4 2 5 8 )
( 1 4 2 5 8 ) → ( 1 2 4 5 8 ), 4 > 2 이므로 순서를 바꿉니다.
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
정렬은 완료되었지만, 알고리즘은 완료 여부를 알 수 없습니다.
순서가 변하지 않는 한 번의 전체 pass를 수행합니다.
Third Pass:
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
구현
Pseudocode implementation (의사코드)
알고리즘은 다음과 같이 표현될 수 있습니다. (0-based array):procedure bubbleSort( A : list of sortable items ) repeat swapped = false for i = 1 to length(A) - 1 inclusive do: /* if this pair is out of order */ if A[i-1] > A[i] then /* swap them and remember something changed */ swap( A[i-1], A[i] ) swapped = true end if end for until not swapped end procedure
Optimizing bubble sort (최적화)
The bubble sort algorithm can be easily optimized by observing that the n-th pass finds the n-th largest element and puts it into its final place. So, the inner loop can avoid looking at the last n-1 items when running for the n-th time:버블 정렬은 n번째 pass에서 n번째 큰 요소를 찾아 최종 위치로 이동하는 것을 관찰함으로써 쉽게 최적화 할 수 있습니다. 그러면 내부 루프는 n번 째 실행시 마지막 n-1 번째 원소의 검토를 하지 않아도 됩니다.
procedure bubbleSort( A : list of sortable items ) n = length(A) repeat swapped = false for i = 1 to n-1 inclusive do if A[i-1] > A[i] then swap(A[i-1], A[i]) swapped = true end if end for n = n - 1 until not swapped end procedure
보다 일반적으로, 하나 이상의 원소가 단일 pass에서 그들의 최종 위치로 이동할 수 있습니다. 특히 모든 원소의 정렬이 완료된 후에는 다시 검사할 필요가 없습니다. 이것은 많은 원소의 비교를 건너 뛸 수 있고, 결과적으로 최악의 경우 비교 횟수에서 50% 성능이 개선됩니다. (자리 바꿈의 횟수는 그대로입니다.), 새로운 코드는 "swapped" 변수를 포함하여, 복잡도를 개선했습니다.
의사 코드는 다음과 같습니다:
procedure bubbleSort( A : list of sortable items ) n = length(A) repeat newn = 0 for i = 1 to n-1 inclusive do if A[i-1] > A[i] then swap(A[i-1], A[i]) newn = i end if end for n = newn until n = 0 end procedure
출처 : http://en.wikipedia.org/wiki/Bubble_sort 발췌 번역(/w Google 번역)
2012년 6월 21일 목요일
새로운 주님의 기도
"하늘에 계신" 하지마라.
세상 일에만 빠져 있으면서.
"우리"라고 하지마라.
나 혼자만 생각하며 살아가면서.
"아버지"라고 하지마라.
서로 아들딸로 살지 않으면서.
"아버지의 이름이 거룩히 빛나시며"라고 하지마라.
자기 이름을 빛내기 위해서 안간힘을 쓰면서.
"아버지의 나라가 오시며"라고 하지마라.
물질 만능의 나라를 원하면서.
"아버지의 뜻이 이루어지소서"라고 하지마라.
내 뜻대로 되기를 기도하면서.
"오늘 저희에게 일용할 양식을 주소서"라고 하지마라.
죽을 때까지 먹을 양식을 쌓아두려 하면서.
"저희에게 잘못한 이를 저희가 용서하오니 저희 죄를 용서하시고"라고 하지마라.
누구엔가 아직도 앙심을 품고 있으면서.
"저희를 유혹에 빠지지 않게 하시고"라고 하지마라.
늘 죄 지을 기회를 찾아다니면서.
"악에서 구하소서"라고 하지마라.
악을 보고도 아무런 양심의 소리를 듣지 않으면서.
"아멘"이라고 하지마라.
주님의 기도를 진정 자기의 기도로 바치지 않으면서.
"우리"라고 하지마라.
나 혼자만 생각하며 살아가면서.
"아버지"라고 하지마라.
서로 아들딸로 살지 않으면서.
"아버지의 이름이 거룩히 빛나시며"라고 하지마라.
자기 이름을 빛내기 위해서 안간힘을 쓰면서.
"아버지의 나라가 오시며"라고 하지마라.
물질 만능의 나라를 원하면서.
"아버지의 뜻이 이루어지소서"라고 하지마라.
내 뜻대로 되기를 기도하면서.
"오늘 저희에게 일용할 양식을 주소서"라고 하지마라.
죽을 때까지 먹을 양식을 쌓아두려 하면서.
"저희에게 잘못한 이를 저희가 용서하오니 저희 죄를 용서하시고"라고 하지마라.
누구엔가 아직도 앙심을 품고 있으면서.
"저희를 유혹에 빠지지 않게 하시고"라고 하지마라.
늘 죄 지을 기회를 찾아다니면서.
"악에서 구하소서"라고 하지마라.
악을 보고도 아무런 양심의 소리를 듣지 않으면서.
"아멘"이라고 하지마라.
주님의 기도를 진정 자기의 기도로 바치지 않으면서.
2012년 6월 7일 목요일
IU(아이유) & Yoo Seungho - Believe in Love MV
all we need is forever love tonight 이 밤이 가면 늦어버려요
우리들의 사랑은 아주 커다란 기적을 만들죠
내 앞에선 그대의 두 눈을 바라보면 내 맘은 뜨겁게 타오르죠
난 바래요 세상의 모든 사랑이 가득하길
이 밤 내 귓가에는 들려요
커다란 사랑이 날 깨우고 있죠 oh love
그댄 왜 아직 모르고 있죠
멀리서 들리는 울음소릴
그 소리를 제발 외면하지 마요
그 아이들의 눈물이 이야기 하고 있잖아
용기 내요 제발 눈감지 말아요
모두의 사랑이 필요해요
all we need is forever love tonight 이 밤이 가면 늦어버려요
우리들의 사랑은 아주 커다란 기적을 만들죠
내 앞에선 그대의 두 눈을 바라보면 내 맘은 뜨겁게 타오르죠
난 바래요 세상의 모든 사랑이 가득하길
난 느낄 수가 있죠.. 맘 깊은 곳에 아직 남아 있는 용기를
당신의 그 마음 가득히 큰 사랑이 넘치고 있어요
귀를 막고... 두 눈을 감아도 (눈을 감아도)
터져버릴 듯한 사랑이 내 눈에 보여요
all we need is forever love tonight 이 밤이 가면 늦어버려요
우리들의 사랑은 아주 커다란 기적을 만들죠
내 앞에선 그대의 두 눈을 바라보면.. 내 맘은 뜨겁게 타오르죠
난 바래요... 세상의 모든 사랑이 가득하길
맘을 열고 떨리는 두 손을 잡아줘요..
세상에 무릎 꿇지 않도록... 난 믿어요 세상엔 아직 사랑이 가득 하죠...
피드 구독하기:
글 (Atom)