윈도우용 JDK를 보면 Portable 설치가 없다. 설치를 할려면 Windows Installer 를 이용하는 방법 밖에 없다. 문제는 두개의 버전, 1.7과 1.8 버전의 JDK 를 설치할 수가 없을 수도 있다. 최신판을 설치된 상태에서 구 버전을 설치할려면 이미 최신버전이 설치가 되어 있어서 설치가 안될 수도 있다. 이럴때 Linux 용 처럼 압축만 해제하면 쓸수 있도록 할 수 있지 않을까? 이 글은 JDK를 압축해제하는 것만으로 설치하는 방법인 Portable 설치에 대해서 다룬다. 또한, 이글은 다음 링크의 내용을 정리한 것이다. How can I get the latest JRE […]
다음 지도 API 좌표값 얻기
다음 지도 API를 이용해서 좌표값을 얻는 PHP 예제 소스
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 |
// 다음 지도api 키값 $map_key = "<다음API키값>"; // 쿼리 돌릴 주소 $address = "지번주소, 혹은 법정주소"; $map_query = urlencode($address); // 여기부터 주소 검색 xml 파싱 $pquery = $map_key. "&q=". $map_query . "&output=xml"; $fp = fsockopen ("apis.daum.net", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)"; } else { fputs($fp, "GET /local/geo/addr2coord?"); fputs($fp, $pquery); fputs($fp, " HTTP/1.1\r\n"); fputs($fp, "Host: apis.daum.net\r\n"); fputs($fp, "Connection: Close\r\n\r\n"); $header = ""; while (!feof($fp)) { $out = fgets ($fp,512); if (trim($out) == "") {break;} $header .= $out; } $mapbody = ""; while (!feof($fp)) { $out = fgets ($fp,512); $mapbody .= $out; } $idx = strpos(strtolower($header), "transfer-encoding: chunked"); if ($idx > -1) { // chunk data $temp = ""; $offset = 0; do { $idx1 = strpos($mapbody, "\r\n", $offset); $chunkLength = hexdec(substr($mapbody, $offset, $idx1 - $offset)); if ($chunkLength == 0) {break;} else { $temp .= substr($mapbody, $idx1+2, $chunkLength); $offset = $idx1 + $chunkLength + 4; } } while(true); $mapbody = $temp; } fclose ($fp); } $channel=new SimpleXMLElement($mapbody); $py = $channel->item[0]->lng; // 위도 $px = $channel->item[0]->lat; // 경도 |
알고리즘 – 최대공약수(Great Common Divisor)
분수 알고리즘에서 마지막으로 약분(reduce a Fraction to Lowest Terms) 을 합니다. 약분은 분자와 분모의 최대공약수(GCD, Great Common Divisor)로 나누는 것을 말합니다. 따라서 약분을 하기 위해서는 최대공약수를 구하면 됩니다. 약분, 최대공약수를 구하라. 최대공약수 구하기 1 최대공약수를 구하는 방법은 여러가지가 있는데 그 첫번째로 분자, 분모 두개를 동시에 나누었을때에 나머지가 없는 수를 구하면 됩니다. 1부터 시작해서 분자, 분모 두수중에 작은 수까지 대입해서 하나씩 나누어서 0이 되는지를 찾아보는 겁니다. 최대공약수를 구하는 무한대입법이라고 보시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
def GCDbyDivide(num1, num2): ''' 최대공약수를 구하는 알고리즘. 두수를 나눗셈으로해서 가장큰 약수를 구하는 방법. ''' if num1 < 0: raise RuntimeError('num1 must be above 0') if num2 < 0: raise RuntimeError('num2 must be above 0') miniNum = min(num1, num2) maxDiv = 1 for i in range(1,miniNum+1): if num1%i == 0 and num2%i == 0: maxDiv = i return maxDiv |
작은 수가 무엇인지를 구하기 위해서 min 함수를 이용했습니다. 무한대입법을 […]
알고리즘 – 분수(Fraction) 문제
알고리즘 – 분수(Fraction) 문제는 컴퓨터 알고리즘을 시작하는데 좋은 예제입니다. 분수는 어릴적 산수시간에 배운 그게 맞습니다. 1/2, 1/3, 1/4 식 입니다. 분수에는도 사칙연산을 할 수 있습니다. 더하기(add), 빼기(subtract), 곱셈(multiply), 나눗셈(divide) 가 그것입니다. 이를 컴퓨터 프로그램 언어를 이용해서 만들어보는 겁니다. 참고: http://interactivepython.org/runestone/static/pythonds/Introduction/ObjectOrientedProgramminginPythonDefiningClasses.html#a-fraction-class 분수의 정의와 제약사항 분수는 다음과 같이 정의됩니다. 수학에서 분수(分數, fraction)는 이나 꼴로 표시한다. 이것은 를 로 나눈 값, 즉 와 의 비를 뜻하며, 여기서 는 분자, 는 분모라고 한다. 이 때 분모 에 이 들어가는 (는 상수)라는 수는 정의될 수 없으므로 ≠ 이어야 한다. From 위키페디아 중요한 것이 분모는 0 이여서는 안됩니다. 또 한가지 이 글에서 제약조건을 걸어야 하는데, 분자와 분모 […]
GC 알고리즘
reference counting algorithm count를 관리하여 reference count가 0이되면 그때그때 garbage collection을 수행하는것이다.object에 reference 가되면 reference count는 1이 증가하고 reference가 사라지면 1이 감소하는 식으로 동작한다. 그런데 이 reference 관계가 간접적이라 하더라도 참조하고 있는 모든 object에 대해 연쇄적으로 reference count가 변경된다 이reference count가 0 이될때마다 garbage collection이 발생하기 때문에 자연스럽게 Pause Time이 분산되어 실시간 작업에도 거의 영향을 주지 않는 장점이 있다. 그러나 reference의 변경이나 garbage collection의 결과에 따라 각 object마다 reference count를 변경해 주어야하기 때문에 이에 대한 관리 비용이 상당하다 또한 Garbage […]
유용한 JVM 플래그들 – Part 8 (GC Logging)
이 씨리즈의 마지막은 가비지 컬렉션 로깅과 연관된 플래그들이다. GC 로그는 힙의 잠재적인 개선, GC설정 이나 애플리케이션의 객체할당 패턴을 들어내주는 아주 중요한 툴이다. 각 GC가 발생하면, GC 로그는 과정과 결과에 대한 정밀한 데이터를 제공한다. -XX:+PrintGC -XX:+PrintGC 나 혹은 별명인 -verbose:gc 는 모든 young generation GC와 모든 풀GC에 대해 라인으로 출력되는 단순히 GC 로깅 모드를 활성화한다. 예를들면 다음과 같다.
1 2 |
[GC 246656K->243120K(376320K), 0,0929090 secs] [Full GC 243120K->241951K(629760K), 1,5589690 secs] |
라인의 시작은, ‘GC’ 혹은 ‘Full GC’, GC 타입이다. 그 다음이 GC 전과 후에(화살표로 구분되는) 점유 힙 메모리고 괄호안에 용량은 현재 힙의 용량이다. 라인의 […]
유용한 JVM 플래그들 – Part 7 (CMS Collector)
HotSpot JVM의 CMS 컬렉터(The Concurrent Mark Sweep Collector)는 주요한 목표중에 하나를 가진다: 낮은 애플리케이션 일시정지 시간. 이 목표는 웹 애플리케이션과 같은 대부분의 상호작용 애플리케이션들에게 중요하다. 관련된 JVM 플래그들을 살펴보기전에, 짧막하게 CMS 컬렉터 운영과 이것을 사용할때에 부닥치게될 주요 이슈들에대한 요점을 다룰것이다. 처리량 컬렉터와 같이, CMS 컬렉터는 old generation 에서 객체들을 다루지만 그 운영방식은 훨씬더 복잡하다. 처리량 컬렉터는 늘 애플리케이션 쓰레드들을 잠시 멈추게하지만, 아마도 적지않은 시간, 그 시간을 애플리케이션이 안전하게 무시할수 있도록 한다. 그와 대조적으로, CMS 컬렉터는 대부분 애플리케이션 쓰레드들과 동시적으로 실행되도록 디자인되었고 아주 적은(혹은 짧은) 잠시 정지시간만 발생시킨다. 응용프로그램과 동시에 […]
유용한 JVM 플래그들 – Part 6 (Throughput Collector)
실제로 우리가 찾은 대부분의 애플리케이션 영역에서, 가비지 컬렉션(GC) 알고리즘은 두가지 기준에 따라 평가되어져 왔다. 보다 높은 처리율을(throughput) 달성하기 위한 좀 더 나은 알고리즘 결과적으로 좀 더 적은 일시 정지시간을(pause times) 가지는 좀 더 나은 알고리즘 먼저, 우리는 GC 맥락에서 “일시 정지시간” 과 “처리율” 말을 명확하게 할 필요가 있다. JVM은 항상 전용의 쓰레드에서, “GC 쓰레드”라 부르는, GC를 수행한다. GC 쓰레드가 활성화될때마다, 그들은 활용할 프로세서와 CPU 시간을 가지고 활동적인 “application 쓰레드”들과 경쟁한다. 조금 단순화하면, 우리는 애플리케이션 쓰레드들이 실행중일때에 전체 프로그램 실행 시간의 […]
유용한 JVM 플래그들 – Part 5 (Young Generation Garbage Collection)
이번 시간에 우리는 주요한 힙 영역의 하나인 “young generation” 에 집중한다. 첫째로, 우리는 우리의 애플리케이션의 성능에 아주 중요한 young generation의 알맞은 설정이 무엇인지 논의한다. 그리고나서 우리는 적절한 JVM 플래그들에 대해서 알아보도록 하자. 순수하게 기능적인 관점에서, JVM은 young generation 을 전혀 필요하지 않는다. – 그것은 하나의 힙 영역으로만으로도 동작한다. 첫위치에 young generation 을 가져야할 유일한 이유는 가비지 컬랙션(Garbage Collection, GC) 성능을 최적화하는데 있다. 구체적으로, young generation 과 old generation 으로 힙의 분리는 두가지 장점을 가진다. 새로운 객체의 할당을 간소화해주고 (왜냐하면 메모리 […]