2016년 12월 27일 화요일

[악보채보]Dream Theater - Take Away My Pain

기존에 딴 넘이 너무 이상하게 따서..

기타만 다시 땀 + 기타 1대로 몰아서 편곡 추가

악보 받기

2021-01-29 : 구글드라이브로 링크 수정 완료


2016년 11월 25일 금요일

Metallica - LORDS OF SUMMER

Sight
Pale riders into the night
Galloping harder and faster
Through your dreaming

보아라
창백한 말 탄 이들이 밤 속으로
더욱 빠르게 질주하는
너의 꿈속을

Wake
Walk towards the fire innate
Frost bitten soul below zero
Excitation

깨어나라
타고난 열기로 나아가고
냉기로 영혼을 얼어붙게 하는
자극

Are you remembering the sound?
Recall the shaking of the ground?

그 소리가 기억나나?
땅의 울림이 기억나나?

Pounding
Pounding
No Remorse
Lords of summer set on course

쿵쿵거리고
쿵쿵거리며
후회없이
여름의 제왕이 진로를 정했다

Pushing
Pushing
Horsemen Ride
Lords of summer, undenied
밀치고
밀치며
말탄이들이 질주한다
부정할 수 없는, 여름의 제왕

At last the thawing has begun
Come trade your darkness for the sun
Melting the chill of winter’s turn 
So celebrate and let your fires burn
The Lords of Summer have returned 

마침내 해빙기가 시작되고
태양을 향한 너의 어둠을 바꿀때가 왔다
겨울 모퉁이의 냉기가 녹아
축하하며 너의 열기가 불타오르게 한다
그 여름의 제왕이 돌아왔다

Straight
Light passes through, penetrate
It’s been a long lonely winter
Illumination

똑바로 가라
빛이 통과하여 지나가고
길고도 외로운 겨울이었지
빛나는 존재

Bright
Bathe in the volume and light
Reanimated by fire
Transformation

빛나라
볼륨과 빛속에 몸을 담그고
열기에 의해 소생된
변화

Become the nexus of the sound
Become the shaking of the ground

소리의 결합체가 되어라
땅의 울림이 되어라

Pounding
Pounding
No Remorse
Lords of summer set on course

Pushing
Pushing
Horsemen Ride
Lords of summer, undenied

At last the thawing has begun
Come trade your darkness for the sun
Melting the chill of winter’s turn
So celebrate and let your fires burn
The Lords of Summer have returned 

Whoa, Pounding
Pounding 
No Remorse
Lords of summer set on course

Whoa, Pushing
Pushing
Horsemen Ride
Lords of summer, undenied
Undenied

At last the thawing has begun
Come trade your darkness for the sun
Melting the chill of winter’s turn
So celebrate and let your fires burn
The Lords of Summer have returned


2016년 11월 23일 수요일

Metallica - Atlas, Rise!

Bitterness and burden
Curses rest on thee
Solitaire and sorrow
All Eternity

괴로움과 부담감
너에 대한 악담
고립됨과 슬픔
이 모든것이 영원하다


Save the Earth and claim perfection
Deem the mass and blame rejection
Hold the pose, reign perception
Grudges break your back

이 세상을 구하고 완벽함을 주장하지만
대부분 추측이고 거절을 떠넘기지
자세를 잡고, 인식을 지배하여
원한은 애를 쓰고 있다


All you bear
All you carry
All you bear
Place it right on, right on me

네가 지탱한 모든 것
네가 견딘 모든것
네가 지탱한 모든 것
그것들을 내려놔라, 바로 나에게


Die as you suffer in vain
Own all the grief and the pain
Die as you hold up the skies
Atlas, Rise!

헛된 고통으로 넌 죽고
모든 비탄과 고통은 나의 것이 되었지
하늘을 떠 받들어 넌 죽었지
거인이여, 일어나라!


How does it feel on your own?
Bound by the world all alone
Crushed under heavy skies
Atlas, Rise!

너 자신은 어떻게 느끼는가?
홀로 세상에 묶여
찌뿌린 하늘아래 으스러졌다
거인이여, 일어나라!

Crucify and witness
Circling the sun
Bastardize and ruin
What have you become?

벌받고 증인이 되어
태양을 돌며
조잡하고 파괴되어
뭘 할 수 있겠는가?

Blame the world, and blame your maker
Wish ‘em to the undertaker
Crown yourself the other savior
So you carry on

세상을 탓하고, 조물주를 탓해보고
장의사에게 바라길
다른 구세주에게 왕관을 씌우라
그래서 계속 하길


All you bear
All you carry
All you bear
Place it right on me, right on me

Die as you suffer in vain
Own all the grief and the pain
Die as you hold up the skies
Atlas, Rise!

How does it feel on your own?
Bound by the world all alone
Crushed under heavy skies
Crushed under heavy skies
Atlas, Rise!

Masquerade as maker
Heavy is the crown
Beaten down and broken
Drama wears you down

조물주로 가장했지만
무겁기만한 왕관
얻어맞고 깨져
널 지치게 하는 연극

Overload, the martyr stumbles
Hit the ground and heaven crumbles
All alone, the fear shall humble
Swallow all your pride

지친, 순교자는 휘청거리고
땅에 부딫혀 천국은 산산조각난다
홀로 남아, 두려움은 비천해지고
네 모든 자존심을 삼킨다

All you bear
All you carry
All you bear
Place it right on, right on me

Die as you suffer in vain
Own all the grief and the pain
Die as you hold up the skies
Atlas, Rise!

How does it feel on your own?
Bound by the world all alone
Crushed under heavy skies
Crushed under heavy skies
Atlas, Rise!


2016년 11월 22일 화요일

Metallica - HARDWIRED

HARDWIRED


ln the name of desperation
ln the name of wretched pain
ln the name of all creation
Gone insane

자포자기의 이름으로
비참한 고통의 이름으로
모든 창조물의 이름으로
미쳐버렸다

We're so fucked
Shit outta luck
Hardwired to self-destruct

그래서 우린 좇됐고
재수도 더럽게 없다
자멸할 수 밖에 없다

On the way to paranoia
On the crooked borderline
On the way to great destroyer
Doom design

피해망상증이 되려는
비뚤어진 경계선상에서
위대한 파괴자가 되기 위한
파멸의 설계

We're so fucked
Shit outta luck
Hardwired to self-destruct

그래서 우린 좇됐고
재수도 더럽게 없다

자멸할 수 밖에 없다

Once upon a planet burning
Once upon a flame
Once upon a fear returning
All in vain

옛날에 행성이 불타고
옛날에 불꽃이 불타올랐고
옛날에 두려움이 돌아올적에
모든게 헛수고가 됐다

Do you feel that hope is fading?
Do you comprehend?
Do you feel it terminating?
ln the end

희망이 사라져 가는 것을 느낄 수 있나?
무슨 뜻인지 알까?
종말이 느껴지나?
종말의 때에


We're so fucked
Shit outta luck
Hardwired to self-destruct
Hardwired to self-destruct

Self-destruct
Self-destruct
Self-destruct

2016년 11월 14일 월요일

OpenOffice - Calc에서 중복 데이터 제거하기..

업무 처리하다 보니..

엑셀로 데이터를 넘겨 받음..

양이 좀 많아서.. 중복 데이터 삭제 기능 검색울 해 보았으나..

엑셀의 중복 제거 기능만 나옴...

오픈오피스는 아무래도 마이너해서 그런가..

한글로 검색 말고.. 영어로 구글링해서 찾은 내용..



1. 중복 제거할 영역 선택

2. 상단 메뉴 - 데이터 - 표준필터 선택

3. 필드 이름을 - 없음으로 선택

4. 하단의 옵션 보기 - 중복 허용 안됨 체크

5. 확인 누르면 끗~~~

2016년 11월 11일 금요일

2. 구글 지도 API로 가까운 매장 찾기 구현

이하 거리 구하기 서버 측 코드

asp + Msxml2.ServerXMLHTTP.6.0 사용 함.

의외로 간단~

<%
Session.CodePage = 65001
Response.ContentType = "application/json"
Response.Charset = "utf-8"


Dim callUrl 
Dim HttpReq
Dim params
origins = Request.QueryString("origins")
destinations = Request.QueryString("destinations")

callUrl = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="&origins&"&destinations="&destinations&"&mode=transit&language=ko-KO&key=구글API키"
Set HttpReq = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0")

HttpReq.open "GET", callUrl, False
HttpReq.send

Response.Write HttpReq.responseText
%>

1. 구글 지도 API로 가까운 매장 찾기 구현

이하 웹페이지 소스 일부. 뭐 내가 짠게 우왕 굿은 아니지만..

이래저래 잘 활용해 보시길...

script에 Google API 키 발급받아서 넣는거 잊지 말길...


var curPos = null;
var directionsDisplay = null;
var directionsService = null;
var storeList = new Array();
var findStoreFlag = false;
storeList[0] = {lat: 37.5707940, lng: 126.9710600};
storeList[1] = {lat: 37.5704049, lng: 126.9722485};
storeList[2] = {lat: 37.5060580, lng: 127.0033890};
storeList[3] = {lat: 37.4843585, lng: 126.9022739};
storeList[4] = {lat: 37.6505030, lng: 127.0619600};
storeList[5] = {lat: 37.3850110, lng: 127.1206630};
storeList[6] = {lat: 37.5544795, lng: 126.9366329};
storeList[7] = {lat: 37.6677905, lng: 126.7646956};
storeList[8] = {lat: 37.7525750, lng: 127.0690960};
function initMap() { 
 var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 14,
  center: storeList[0]
 });
 directionsDisplay = new google.maps.DirectionsRenderer;
 directionsService = new google.maps.DirectionsService; 
 directionsDisplay.setMap(map); 
 getLocation();
}

function getLocation() {  //위치 조회시작..

 if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(showPosition,showError);
 } else {
  alert("Geolocation is not supported by this browser.");
  var map = new google.maps.Map(document.getElementById('map'), {
   zoom: 14,
   center: storeList[0]
  });
 }
}

function fnSetCurLoc(position){ // 현재 위치를 저장
 curPos = {
  lat: position.coords.latitude,
  lng: position.coords.longitude
 };
}

function showPosition(position) { 
 curPos = {
  lat: position.coords.latitude,
  lng: position.coords.longitude
 };
 alert(curPos);
 fnFindStore();//가까운 위치 미리 찾기...
 directionsService.route({
   origin:curPos,  // Haight.
   destination: storeList[document.getElementById('selStore').value],
   travelMode: google.maps.TravelMode.TRANSIT,
   unitSystem: google.maps.UnitSystem.METRIC,
   avoidHighways: false,
   avoidTolls: false
  }, function(response, status) {
  if (status == google.maps.DirectionsStatus.OK) {
   directionsDisplay.setDirections(response);
  } else {
   window.alert('Directions request failed due to ' + status);
  }
 });
}


var minDistance = 10000000;
var minDistInx = 0;
function fnFindStore(){
 if(!findStoreFlag){  //한번만 찾게 flag로 조정
  $.ajaxSetup({
   async: false
  });
 
  for(listCnt = 0 ; listCnt &lt; storeList.length ; listCnt ++){
   var callUrl = "/api/google/retDistance.asp";
   var sendParams = {  
    origins : curPos.lat + "," + curPos.lng, 
    destinations : storeList[listCnt].lat + "," + storeList[listCnt].lng
   };
   console.log(listCnt);
   $.getJSON( callUrl, sendParams ).done(function( data ) {
    console.log( "JSON Data: " + data.rows[0].elements[0].distance.value + ":::" + listCnt + ":::" + minDistInx + "::::" + minDistance);
    if(minDistance &gt; data.rows[0].elements[0].distance.value){    //최소 거리를 계산해서 저장...
     minDistance = data.rows[0].elements[0].distance.value;
     minDistInx = listCnt;
     console.log(minDistance);
     console.log(listCnt);
    }   
   }).fail(function( jqxhr, textStatus, error ) {
    var err = textStatus + ", " + error;
    console.log( "Request Failed: " + err );
   });
  }
  
  if(!findStoreFlag) findStoreFlag = true;
 }
}

function fnSetStore(){
 console.log(minDistance);
 console.log(minDistInx);
 document.getElementById('selStore').value = minDistInx;
 directionsService.route({
   origin:curPos,  // Haight.
   destination: storeList[minDistInx],
   travelMode: google.maps.TravelMode.TRANSIT,
   unitSystem: google.maps.UnitSystem.METRIC,
   avoidHighways: false,
   avoidTolls: false
  }, function(response, status) {
  if (status == google.maps.DirectionsStatus.OK) {
   directionsDisplay.setDirections(response);
  } else {
   window.alert('Directions request failed due to ' + status);
  }
 });
}

function showError(error){
 switch (error.code){
  case error.PERMISSION_DENIED:
   alert("User denied the request for Geolocation.");
   break;
  case error.POSITION_UNAVAILABLE:
   alert("Location information is unavailable.");
   break;
  case error.TIMEOUT:
   alert("The request to get user location timed out.");
   break;
  case error.UNKNOWN_ERROR:
   alert("An unknown error occurred.");
   break;
 }
}

0. 구글 지도 API로 가까운 매장 찾기 구현

0. 회사에서 모바일 환경에서 매장으로 길찾기를 하게 해달라고 함.

1. 구글, 네이버, 다음 3개의 지도 서비스 검토

2. 일단 네이버, 다음은 제휴를 맺은 업체만 길찾기를 제공함.

   제휴가 없으면.. 그냥 지도에 점찍기 정도만 가능. 기타 기능은 서술 생략하겠음.

3. 구글은 길찾기를 무료로 제공하나!!!! 찾기 모드에서

   걷기, 자전거, 자가용... 모두!!!! 정상 작동하지 않는다..

   오직 대중교통 안내만 가능... 어쩔수 없이 이걸로 구현

   그나마 천만 다행인게 대중교통 안내에 도보 정보도 표시가 된다.

4. 기본 예제들은 구글 지도 API에서 제공

5. 개발한 부분은 현재 위치에서 각 매장들간의 거리를 측정하여

   데이터를 미리 갖고 있다가, 가까운 매장 검색 버튼을 눌렀을 때

   지도에 표기만 하면 됨.

6. 지도 API의 사용의 기본은 HTML5의 navigator.geolocation 를 사용하여

   접속 기기의 위도와 경도를 받아오는 것 부터 시작하면 된다.

7. 지도 그리는건 알아서들 하시고(https://developers.google.com/maps/web/?hl=ko)

   거리 측정에 대해서만 기술함.

8. 일단 길 찾기 class는 다음과 같다. 해당 class의 API와 예제를 참고하면

   길찾기를 간단히 구현 할 수 있다.

    var directionsDisplay = new google.maps.DirectionsRenderer;
    var directionsService = new google.maps.DirectionsService;

9. 가까운 지점의 검색은 distancematrix class를 사용한다.

   이 부분은 xml 또는 json 형태의 데이터를 수신하는 형식으로 사용 가능하다.

   xml은 parsing 하기 귀찮으므로 간단한 json 형태로 구현 하기로 했다.

10. 그런데.. 이 거리 구하는게 google에 실시간으로 통신을 해야 해서

   cross-domain 문제가 발생한다. 물론 jquery의 jsonp 형태의 통신을 하면

   일단 수신은 가능하나! 내 경우에 Unexpected Exception이 발생.

11. 이래저래 구글링을 해보았고, 내린 결론은

    수신되는 json 형식에 문제가 있다고 판단됨.

    뭐 엔터키를 치환해주면 된다는 글도 봤으나. 전부 안됨.

12. 방향 선회하여 json 통신으로 다시 개발.

13. 회사 개발 환경은 IIS 7.5 + ASP 환경으로 ASP에서 xml 통신을 사용하여

     위치 검색 결과를 수신하여 다시 웹페이지에서 json으로 받는 식으로 우회 함.

14. 개인적으로 cross-domain 문제 해결 할 시에 jquery로 다른 domain을

    호출하는 것 보다, Server에서 호출하면 쉽게 해결이 된다고 판단됨.

15. 여튼 구현 성공!


2016년 10월 28일 금요일

회사에서 DB의 컬럼값에 대한 유사성을 대조하는 로직을 찾던 중..

http://stackoverflow.com/questions/8518695/t-sql-get-percentage-of-character-match-of-2-strings

위의 로직을 발견..

상당히 괜찮다!!


SELECT  [dbo].[GetPercentageOfTwoStringMatching]('valentin123456'  ,'valnetin123456')



CREATE FUNCTION [dbo].[GetPercentageOfTwoStringMatching]
(
    @string1 NVARCHAR(100)
    ,@string2 NVARCHAR(100)
)
RETURNS INT
AS
BEGIN

    DECLARE @levenShteinNumber INT

    DECLARE @string1Length INT = LEN(@string1)
    , @string2Length INT = LEN(@string2)
    DECLARE @maxLengthNumber INT = CASE WHEN @string1Length > @string2Length THEN @string1Length ELSE @string2Length END

    SELECT @levenShteinNumber = [dbo].[LEVENSHTEIN] (   @string1  ,@string2)

    DECLARE @percentageOfBadCharacters INT = @levenShteinNumber * 100 / @maxLengthNumber

    DECLARE @percentageOfGoodCharacters INT = 100 - @percentageOfBadCharacters

    -- Return the result of the function
    RETURN @percentageOfGoodCharacters

END




-- =============================================     
-- Create date: 2011.12.14
-- Description: http://blog.sendreallybigfiles.com/2009/06/improved-t-sql-levenshtein-distance.html
-- =============================================

CREATE FUNCTION [dbo].[LEVENSHTEIN](@left  VARCHAR(100),
                                    @right VARCHAR(100))
returns INT
AS
  BEGIN
      DECLARE @difference    INT,
              @lenRight      INT,
              @lenLeft       INT,
              @leftIndex     INT,
              @rightIndex    INT,
              @left_char     CHAR(1),
              @right_char    CHAR(1),
              @compareLength INT

      SET @lenLeft = LEN(@left)
      SET @lenRight = LEN(@right)
      SET @difference = 0

      IF @lenLeft = 0
        BEGIN
            SET @difference = @lenRight

            GOTO done
        END

      IF @lenRight = 0
        BEGIN
            SET @difference = @lenLeft

            GOTO done
        END

      GOTO comparison

      COMPARISON:

      IF ( @lenLeft >= @lenRight )
        SET @compareLength = @lenLeft
      ELSE
        SET @compareLength = @lenRight

      SET @rightIndex = 1
      SET @leftIndex = 1

      WHILE @leftIndex <= @compareLength
        BEGIN
            SET @left_char = substring(@left, @leftIndex, 1)
            SET @right_char = substring(@right, @rightIndex, 1)

            IF @left_char <> @right_char
              BEGIN -- Would an insertion make them re-align?
                  IF( @left_char = substring(@right, @rightIndex + 1, 1) )
                    SET @rightIndex = @rightIndex + 1
                  -- Would an deletion make them re-align?
                  ELSE IF( substring(@left, @leftIndex + 1, 1) = @right_char )
                    SET @leftIndex = @leftIndex + 1

                  SET @difference = @difference + 1
              END

            SET @leftIndex = @leftIndex + 1
            SET @rightIndex = @rightIndex + 1
        END

      GOTO done

      DONE:

      RETURN @difference
  END 

2016년 10월 24일 월요일

MySQL에서 jdbc 연결 시 Unknown DataBase 'SID이름' 오류 발생

분명 맞는 코드를 사용했다고 생각하고 java 프로그램을 작성했는데..

DB에 테스트 연결을 할때.. 계속해서

Unknown DataBase ~~~ 오류 발생

이래저래 찾아보니.. 여러가지 이유가 나오나. 보통은 접속 정보가 잘못됨 이라는 내용들..

다시한번 코드를 잘 보니까.. Connection String에 끝에 세미콜론이 들어가서 발생한 문제...

private static String url = "jdbc:mysql://192.168.0.56:3306/glpi;";

이 코드를

private static String url = "jdbc:mysql://192.168.0.56:3306/glpi";

로 수정하니까 말끔히 해결..

지나친 Ctrl + C + V 는 오류를 동반합니다.. ㅡㅡ;;;

2016년 9월 30일 금요일

IT 자산 관리 프로그램 GLPI 한글화 하기

어찌어찌 번역은 다 해서 올려 놓았으나..

회사에선 다음 빌드까지 기다려 주지 않기에

번역을 다운로드 해 봤다..

구축한 웹 사이트에 로그인을 해보고..

언어 설정으로 가 보았으나... 어라??? 한글 선택이 없다!!!

이거 뭐지???

이래저래 찾아보다가.. 알아낸것..

1. 일단.. 한글 선택 가능하게 하려면.. 설치 디렉토리의 config 디렉토리 안에 define.php 에다가 수동으로 추가해줘야 하드라..

소스를 보면.. 안에 이쯤이 언어 설정 모음이구나.. 싶은 위치가 있다..

거기에.. 수동으로

  'ko_KR' => array('한국어', 'ko_KR.mo','ko_KR', 'ko','Korean'    , 2), 

라고 추가해줘야 한다.. 오타나면 죽어도 안보인다.. 이 걸로 4시간 헤맴

2. 한글이 짠하고 나오나... 번역률이 형편없다.. 그 이유는 예전에 20~30% 로 번역 된게 빌드되서 그런 거임..

3. 자 내가 번역한걸로 하자!! 유후~~~

내가 번역 한 걸로.. 원하는 버전을 다운 받고..

https://www.transifex.com/glpi/GLPI/language/ko_KR/

다운 받으면.. 확장자가 po다..

이걸 locales 디렉토리에 복사해 놓자...

이걸 또 컴파일 해줘야 함..

4. 명령어는

msgfmt "ko_KR.po" -o "ko_KR.mo"

요렇게 하면.. mo 파일이 갱신된다..

5. 웹 페이지 새로 고침하면.. 짜잔~~~~

6. 아 흐뭇해~~~~ 난 역시 대단해..


2016년 9월 29일 목요일

이번엔 GLPI 오픈소스 자산 관리 프로그램 번역 중...

회사에서 사용할 오픈소스 IT 자산 관리 프로그램을 검토 중.

기존에 앞서 번역했던..

snipe-it 가 설치가 너무 어려워서....(composer에 어쩌구 저쩌구 환경 맞추는데 3일 걸림..)

실제 활용하기가 너무 어렵다란 생각이 들어.. 100% 해놓은건 아깝긴 하지만..

누군가가 잘 쓰겠지 머...

다른 솔루션 검토중..

http://glpi-project.org/?lang=en 가 괜찮은 듯..

국내 솔루션 업체 중 이 솔루션을 커스터 마이징 해서 팔아 먹는 넘들도 있드라..

얘네들 GPL 라이선스는 뭔지 알고 하는겨?

하여간.. 그래서.. 다시 또 번역 중..

https://www.transifex.com/glpi/GLPI/dashboard/

앞서 번역이 한 23% 정도 였는데..

3일동안 해서.. 일단.. 78% 정도록 올려놨다..

근데.. 일본은 98%란 말이지.. 질 수 없다... ㅡㅡ+++

근데.. 이런 번역 할 때는 용어사전을 같이 만들면서 해야 하는데..

https://www.transifex.com/glpi/GLPI/glossary/ko_KR/

앞서 작업한 넘들이.. 그런거 싹 무시하고 해서리.. 개고생 중..

용어 갈아 엎고.. 사전 작성하고..

우리나라 개발자들 잘하는 사람은 잘 하지만..

아직도 문서 잘 안 읽고, 절차 같은거 안 지키고.. 이젠 좀 바꾸자!

하간.. 번역 알바를 투잡으로 해볼까란 생각도 듬.. ㅎㅎ

2016-09-30 갱신..


98% 번역 완료.. 일단.. 일본 넘들이랑 동점..

애매한 문장은 적용하면서 다시 수정해야 할듯..

2016년 9월 28일 수요일

[PS1] Wizardy 1 클리어

PS1 버전으로 클리어 함..


릴리가민 사가로 나온 거라.. 이거 깨고.. 바로 Wizardry 2로 캐릭터 전송함..

언젠간 꼭 해보고 싶은 시리즈라 시작은 했는데.. 옛날 게임이고..

치트느님의 힘으로 2주만에 1편 클리어 함.

이하 엔딩 캡쳐~~

일단 지하 10층 진입

화려한 금 명판 위에 글자가 새겨져 있다. 글귀는 화려하고 다양한 색으로 써있다:
"네 놈은 '웨드나'의 둥지에 무단침입했다. 나의 수호자들을 이기고 지나 갈 순 없을 것이다!"

그래서 나와 수비대들은 이 힌트를 남긴다: "콘트라-덱트라 어베뉴(오른쪽으로 가지 말라는 뜻)"
추신 - 트레버(게임 만든 놈) 병신!
각 방의 문을 열 때마다 몬스터들이 덤빈다.. 그 넘들이 수호자들인 듯.. 그냥 몬스터다.. 죽이고.. 바로 오른쪽으로 이동하면 10층 입구로 이동한다.. 그래서.. 위의 힌트가 있는 듯.. 한 떼거지 무찌르고 지나가 보면...


 수호자 한 무리를 무찔렀지만, 더 많이 있다. 멍청한 녀석아 갈 수 있을때 돌아가라!
말 안 듣기 우주 챔피언인 나는 당연히 그냥 간다.. 사실.. 몇번이고.. 출구로 돌아감..얘들이 너무 쎄다. 어찌어찌 웨드나의 방 앞까지 가면...


벽에 있는 신중한 표지판을 읽었다:
사악한 마법사 웨드나의 거처!
마법사가 있는 공식 방문 시간은 오전 9시부터 오후3시까지!

내가 몇시에 들어간진 모르겠다만.. 이하 웨드나와 싸움..

에뮬레이터의 장점으로.. 부하가 적게 나올때까지
강제 세이브 + 강제 로드 신공!!

공략법은.. 승려로 얘를 벙어리로 만들면 쉽다. 마법이 너무 쎄다.
이기면 얻을 수 있는
웨드나의 아뮬렛을 착용하고 사용하면!!
좌표를 입력하라고 나오는데.. 그냥 아무 좌표나 입력하면
짠 하고 마을로 탈출!!

축하합니다
당신은 아뮬렛을 되찾고 군주의 시험을 통과했습니다!
보상으로 미친 군주가 50,000GP와 EP를 내렸습니다!
또한 당신들을 그의 최정예 호위로 임명했습니다.
명예로운 계급장도 달았죠.

저 줬다는 돈 말이다... 2 편으로 전송하니까.. 아이템이고 뭐고 하나도 없드라..

썩을 놈..

2016년 9월 26일 월요일

linux 디렉토리 권한 복원 하기..

테스트 서버에서

실수로 /etc 디렉토리에 chmod 777을 해버렸따~~~!!!! ㅜ_ㅜ

급 구글링...

살았다..

http://root.so/archives/272

CentOS 6 에서 php 5.3 을 5.6으로 업그레이드 하기..

윈도우처럼 업데이트 버튼 한번 누르면 참 좋겠으나..

그러면 리눅스가 아니지... ㅎㅎ

아래 링크가 구글링 한 것 중에 정답임..

https://www.zerostopbits.com/how-to-upgrade-php-5-3-to-php-5-6-on-centos-6-7/

2016년 9월 8일 목요일

javascript로 임시 ID를 생성할때..TIP?


아래처럼 해보면 어떨까?


var rightNow = new Date();
var res = rightNow.toISOString().slice(0,19).replace(/-/g,"").replace(/:/g,"");


원래는 yyyymmddhhmmss 이런 식으로 해서 받아 왔었는데..

찾아보면.. date 객체를 생성해서.. replace 하는 형태로 쓰던데..

저따구로 하면.. 더 간단하게 받을 수 있다..

유후~~~

2016년 8월 12일 금요일

Frankenstein Created Woman 1967 자막 만들어 봄..

우연히 토렌트에서

받은 영화인데..

옛날 영화라 자막도 없고 해서

직접 번역 해봄..

그럭저럭 볼만은 한데..

원래 B급 영화라.. 고딴건 감안하고 보시길..

자막 받기!

마그넷으로 영화 받기!





2021-01-29 : 구글드라이브로 다운로드 변경

2016년 8월 8일 월요일

[Android] Android용 Dragon Quest 8

http://ctrlacv.com/dq8/

뒤늦게 DQ8에 도전중..

옛날 콘솔 게임을 하려니.. 불편함이 있기에..

돈 만 좀 고치려고 헤매다가 찾음..

설명서는

http://haheonyoung.blog.me/220702041302

여기 참고



2016-09-01 클리어 후기

역시 RPG는 Dragon Quest 시리즈가 쵝오!!

동화같은 이야기 구성에 모든 시리즈가 다 만족스럽다.

클리어세이브 백업!

이제 9편 해봐야지!

2016년 7월 19일 화요일

모바일 웹 사이트 디버깅 삽질기...

참고

http://forum.xda-developers.com/lg-g3/general/guide-connecting-lg-g3-to-linux-adb-aka-t2821673

회사에서 운영하는 모바일 웹사이트의 결제가 문제 있다고 하여..

일단.. 크롬 디버깅을 하려고 했으나..

일반적으로 설정한다는 inspect 에서 장치가 전혀 안 보여서..

머나먼 삽질 여행을 시작함..

사용폰은 LG G3 Cat.6

이하 삽질한 순서

1. 장치 드라이버를 구글 드라이버로 바꿔 봤으나 -------> X

2. Android Studio 깔고 SDK Manager 깔고 명령어 내리면 된다!  -------> X

3. adb kill-server, adb start-server 하면 그냥 되던데?  -------> X

결국 오전 다 보내고 찾은건..

상단의 참고 내용.. 운영체제가 다르긴 하지만.. 중요한건..

USB 연결 모드가!!!

MTP가 아니라 PTP로 해야한다!!! 이유는 나도 모른다!~!!!!

모드 변경후 adb server 다시 시작하고 adb devices 하니까 목록이 떠억!!!

아 썅~~!~!


2016년 7월 18일 월요일

SQL Management Studio 2016 Preview 4월, 7월 버전 사용하지 마셈.

MS에서 뭔 지럴을 했는지 모르겠으나..

DB 접속시 메소드 하나를 못 찾는다고 나옴.

구글링 해보았더니.. 동일 문제 발생하는 분들 여럿 있음..

하루 종일 해결해 보려 했으나..(패치 라던지.. 재 설치라던지...)

해결 안됨.. 빌드 시에 뭔가 문제가 있던것으로 짐작됨..

하여간.. 당분간 사용하지 마셈..

현재 하위 버전 구해서 하고 있음..

2016년 7월 12일 화요일

PHP 7 + Apache HTTP 관련 황당 삽질기...

이래저래 PHP 7 + Apache HTTP 환경으로 테스트 할 일이 생겨서..

오전부터 구축 시작..

이쯤이야 하고 시작했는데.. 어느덧 오전 다 감..

httpd 실행때 마다 Syntax Error 를 뿜어내며.. dll 파일을 못 읽겠다고 함..

컴 환경은 Windows 10 64 bit

이리저리 해보다가

찾은 답은..

PHP를 64bit용으로 받아서 썼는데....

Apache HTTP 가 64bit가 아니여서 생긴일..

아 놔.. 왜 그럼 오류를 Syntax Error를 뿜냐!!

뽀나스로 Apache HTTP 64 Bit Build 한 냥반 블로그 링크 투척!!

http://www.anindya.com/

그리고 하나더!!

mysql 기본 접속 library가 PHP 7에는 없다

PHP 5 : php_mysql.dll

PHP 7 : php_mysqli.dll

그래서 PHP 5에서 복사해서 넣어줌!

2016년 7월 7일 목요일

Classic ASP에서 solr 검색 값 Parsing 하기

검색 서버는 알아서들 구축 (solr 이젠 쉽죠?)

현재 개발환경 IIS 7.5

ASP는 오래된거에 비해서 야매 같은 기술들이 많아서리..

이번 건도.. 뭐가 정확한지 잘 모르겠으나..

일단 내 경험에서 되는걸로..


'검색서버에서 제품 정보 읽어서 XML로 저장하기..' Response.Buffer = true Session.CodePage = 949 상품코드 = "상품코드" Set objXmlHttp = server.CreateObject("Msxml2.ServerXMLHTTP.3.0") objXmlHttp.open "POST", "http://검색서버주소/solr/코어이름/select?q=상품코드:"&상품코드&"&indent=true", false
objXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" objXmlHttp.send strResponseText = objXmlHttp.responseText Set objXmlHttp = Nothing
Dim xml: Set xml = Server.CreateObject("MSXML2.DOMDocument.3.0") xml.LoadXml(strResponseText)
Dim sResult: sResult = ""
Dim node For Each node in xml.selectSingleNode("/response/result/doc").childNodes 'sResult = sResult & node.xml' Response.Write(node.getattribute("name")) Response.Write("::") Response.Write(node.text) Response.Write(Chr(10)&Chr(13)) Next


Response.End()

여기까지 소스.

간단한 설명..

통신하는거야.. 뭐 보통 알고 있는 Msxml2.ServerXMLHTTP.3.0 사용함

의외로 검색서버가 UTF-8로 동작해서 당근

Session.CodePage = 65001로 했으나 의외로 깨짐..

그래서 949로 변경했더니 잘 됨.

문제는 parsing인데.. 처음에 구한 소스는 XMLDOM으로 하게 했음..

근데.. 안됨.. 아마 서버에 일반적으로 설치되는 컴포넌트가 아닌거 같다는 생각이 듬..

그래서 변경..

MSXML2.DOMDocument.3.0 일단 이게 잘 됨..

API 사이트는

https://msdn.microsoft.com/en-us/library/ms764730(VS.85).aspx

보통 여러 method 안쓸테니.. 그냥.. 속성 값과 node의 값 읽어오는 예제로

훈훈한 마무리..

끗~!

ASP용 코드 정리기

ASP용 코드 정리기

구하기 힘들어서 백업으로 게시함.

https://sites.google.com/site/jaymz9634/Home/aspyongkodeujeonglipeulogeulaem/RSFSimple.7z

2016년 7월 5일 화요일

SQL Formatting 은 이게 최고인듯..


SQL Beautifier

http://www.dpriver.com/products/sqlpp/ssms_index.php

MSSM 플러그인 형태도 제공하고..

그냥 웹버전도 있다!!

개발시에

SQuirrel SQL Client 하고 이 플러그인 얹어서 프로시저 편집시 MSSM 사용하면

꿀잼..... 은 아니구나... 업무지..

2016년 7월 1일 금요일

[NES 개발번역] PPU power up state

PPU 전원 입력 상태

2008년 3월에, Blargg가 NTSC버전 NES PPU의 전원 입력 / 리셋 상태와 동작에 대해서 역-공학을 수행했다.
초기 레지스터 값
레지스터전원 입력 시리셋 후
PPUCTRL ($2000)0000 00000000 0000
PPUMASK ($2001)0000 00000000 0000
PPUSTATUS ($2002)+0+x xxxxU??x xxxx
OAMADDR ($2003)$00unchanged1
$2005 / $2006 latchclearedcleared
PPUSCROLL ($2005)$0000$0000
PPUADDR ($2006)$0000unchanged
PPUDATA ($2007) read buffer$00$00
odd framenono
OAMpatternpattern
NT RAM (external, in Control Deck)mostly $FFunchanged
CHR RAM (external, in Game Pak)unspecified patternunchanged
? = unknown, x = irrelevant, + = often set, U = unchanged
  • PPU는 화상의 상단에서 전원과 리셋이 발생한다. 참고: PPU rendering.
  • Writes to the following registers are ignored if earlier than ~29658 CPU clocks after reset: PPUCTRLPPUMASKPPUSCROLLPPUADDR. This also means that the PPUSCROLL/PPUADDR latch will not toggle. The other registers work immediately: PPUSTATUSOAMADDROAMDATA ($2004),PPUDATA, and OAMDMA ($4014).
    • There is an internal reset signal that clears PPUCTRLPPUMASKPPUSCROLLPPUADDR, the PPUSCROLL/PPUADDR latch, and the PPUDATA read buffer. (Clearing PPUSCROLL and PPUADDR corresponds to clearing the VRAM address latch (T) and the fine X scroll. Note that the VRAM address itself (V) is not cleared.) This reset signal is set on reset and cleared at the end of VBlank, by the same signal that clears the VBlank, sprite 0, and overflow flags. Attempting to write to a register while it is being cleared has no effect, which explains why writes are "ignored" after reset.
  • If the NES is powered on after having been off for less than 20 seconds, register writes are ignored as if it were a reset, and register starting values differ: PPUSTATUS = $80 (VBlank flag set), OAMADDR = $2F or $01, and PPUADDR = $0001.
  • The VBL flag (PPUSTATUS bit 7) is random at power, and unchanged by reset. It is next set around 27384, then around 57165.
  • Preliminary testing on a PAL NES shows that writes are ignored until ~33132 CPU clocks after power and reset, 9 clocks less than 311 scanlines. It is conjectured that the first VBL flag setting will be close to 241 * 341/3.2 cycles (241 PAL scanlines); further testing by nocash has confirmed this.
  • It is known that after power and reset, it is as if the APU's $4017 were written 10 clocks before the first code starts executing. This delay is probably the same source of the 9 clock difference in the times for PPU writes being ignored. The cause is likely the reset sequence of the 2A03, when it reads the reset vector.
  • 1: Although OAMADDR is unchanged by reset, it is changed during rendering and cleared at the end of normal rendering, so you should assume its contents will be random.
  • During the warmup state, the PPU outputs a solid color screen, usually grey, but it depends on the hardware.
  • The Reset button on the Control Deck resets the PPU only on the front-loading NES (NES-001). On top-loaders (Famicom, NES-101), the Reset button resets only the CPU.
  • Nametable memory in the Control Deck and CHR RAM in the Game Pak are unchanged by Reset, as are the CHR bank settings of most mappers. Their contents are unspecified at power on.

Best practice

The easiest way to make sure that 29658 cycles have passed, and the way used by commercial NES games, involves a pair of loops like this in your init code:
  bit PPUSTATUS  ; clear the VBL flag if it was set at reset time
vwait1:
  bit PPUSTATUS
  bpl vwait1     ; at this point, about 27384 cycles have passed
vwait2:
  bit PPUSTATUS
  bpl vwait2     ; at this point, about 57165 cycles have passed
Due to the $2002 race condition, alignment between the CPU and PPU clocks at reset may cause the NES to miss an occasional VBL flag setting, but the only consequence of this is that your program will take one frame longer to start up. You might want to do various other initialization, such as getting the mapper and RAM into a known state, between the two loops.

See also

References

BE Band (비밴드) - 2024년 03월 02일 잠실새내 락앤롤욱스 공연

나의 10~20대를 보낸 잠실에서의 공연.. 오랜만에 가보니.. 여기가.. 마눌님과 자주 가던 영화관이었는데... 여긴 뭐가 있었는데... 란 추억도 떠올리며 기분좋게 감.​ 공연장은 좀 협소한 편이었고, 인천의 쥐똥나무 보다는 약간 크고... 인천 ...