달력

10

« 2017/10 »

  • 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
  •  
  •  
  •  
  •  

Windows 10 부터 새롭게 등장하는 MS Edge 브라우저로 자신의 IP로 접속을 하려면 '이 페이지에 연결할 수 없음' 페이지가 표시되면서 접속이 실패합니다.

 

예를 들어 보통 자신의 IP가 192.168.100.5 라고 하고 자신의 컴퓨터에 웹서버가 설치되어 있다면 보통 브라우저 주소창에 http://192.168.100.5 라고 입력하면 웹 페이지가 표시됩니다.

 

그러나 엣지 브라우저로는 자신의 IP 및 127.0.0.1로도 접속이 되지 않으며 다음과 같이 페이지가 표시됩니다.

 

 

IE, Chrome, Firefox, Safari 등등 모든 브라우저가 잘 접속이 됩니다만 유독 MS 엣지 브라우저는 접속이 안됩니다. 이 문제는 앱의 네트워크 격리 문제 때문에 발생하는 문제인데 다음과 같은 명령으로 문제를 해결할 수 있습니다.

 

명령창을 관리자 권한으로 실행한다음에 다음 명령을 입력합니다.

CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe

 

 그런다음, 다시 MS Edge 브라우저로 동일한 주소를 입력하면 웹 페이지가 잘 표시됩니다.

 보안을 위해서 MS Edge 브라우저로 로컬 IP로 접속되는 것을 차단이 되는 것은 좋을 일이지만, 개발자의 입장에서는 마냥 좋은 일만은 아니군요.

 

다시 이 옵션을 해지하려면 아래 명령을 입력하면 됩니다.

CheckNetIsolation LoopbackExempt -d -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe

 

관련된 URL은 다음과 같습니다:

저작자 표시
신고
Posted by 서프리
2016.02.26 15:53

Asus 노트북 AS 기타2016.02.26 15:53

전임자가 사용하던 노트북을 인계 받았는데 터치 패널이 작동이 안되었다.
보증 기간은 이미 지났고 참고로 내가 가지고 있는 노트북 보증기간은 2년이다. 옛날만 해도 1년의 보증기간이였다면 2년을 보증해 주니 참 괜찮은 것 같다.
하여간 용산에 있는 Asus 노트북 서비스센터에 방문 했다. Asus 노트북 AS는 로얄클럽으로 노트북 AS를 강화하겠다는 의지가 보인다. 위치는 서울 용산구 백범로90길 90 KCC웰츠타워 2층이고 삼각지 역에서 한 10분 정도 걸은 것 같다.
건물 밖에서 바로 asus 서비스 센터가 있는 것을 볼수 있도록 간판도 잘되어 있었다. 옮긴지 얼마 안되었는지 깨끗하고, 평일인데 불구하고 사람이 꽤 있었다.
들어가면 asus의 노트북들을 체험 해볼수 있는 공간이 있고, 기다리면서 커피를 먹을 수 있도록 커피 머신도 있다.​


커피머신 옆에 있는 번호표를 뽑고 증상에 대해서 작성하면 AS가 진행이 된다.
AS기간이 지났음에도 불구하고 간단한 고장은 점검비 1만원 정도만 받고 간단히 수리해 주었다. 물론 수리가 밀리다 보니 기다리는 시간은 좀 있었지만 너무 늦은 수리는 택배로 받는 것도 가능하다고 한다.
대기업 제품만 AS가 잘 되는지 알았지만 ASUS노트북도 AS가 꽤 잘되는 것을 보고 많이 놀랐다.

나중에라도 노트북을 살때 Asus 노트북도 선택할만한 가치가 있을 곳 같다.
노트북의 특성 상 AS는 반드시 필요하며 AS가 잘 안되는 노트북은 치명적인 단점을 가지고 있는 것이다. 소니의 바이오 노트북도 가지고 있지만 보증기간이 끝난 후에 비싼 수리비에 좌절한 적이 있다.
Asus 노트북을 더 좋아하게 될 듯하다

저작자 표시
신고

'기타' 카테고리의 다른 글

Asus 노트북 AS  (0) 2016.02.26
SyntaxHighlighter 적용 테스트  (0) 2014.01.03
Posted by 서프리
2015.02.23 14:29

WinSCP 5.7 한국어 번역 완료 WinSCP2015.02.23 14:29

그 동안 미루어 놓았던 WinSCP 5.7 버전 한국어 언어팩 번역을 완료하였습니다.

역시, 게으름은 전혀 도움이 되지 않는군요. 불행하게도 제가 게으른 덕분에 5.7 버전 설치 시 한국어가 빠지게 되었습니다.

다음 버전에는 추가되길 바랍니다.

 

WinSCP 5.7 버전에서는 다음 기능이 추가 되었습니다.

  • WebDAV 지원
  • 응답 속도를 개선한 단순하고 향상된 사용자 인터페이스
  • 현재 전송을 백그라운드 전송 큐로 이동하여 지속적인 전송 지원
  • 개별 파일에 대한 동기화 방향을 변경하는 옵션을 포함한 향상된 동기화 검사 목록 창
  • 향상된 세션 URL 작업
  • 향상된 스크립트, 명령줄 .NET 어셈블리 지원
  • 사이트의 메모 기능

 

 

저작자 표시
신고

'WinSCP' 카테고리의 다른 글

WinSCP 5.7 한국어 번역 완료  (2) 2015.02.23
WinSCP 5.0.6 Beta 한국어 작업 완료  (0) 2015.02.04
Posted by 서프리
2015.02.04 09:22

WinSCP 5.0.6 Beta 한국어 작업 완료 WinSCP2015.02.04 09:22

한동안 WinSCP의 업데이트가 크게되지 않아 번역할 일이 없었는데 간만에 martin이 메일을 보내서 로컬라이징을 해 달라고 하는군요.

홈페이지에 들어가보니 WinSCP 5.0.6 Beta 버전을 만들었다고 하는데, 추가된 문장들이 꽤 있더군요.

 

기존 4 버전에서와 틀려진 점은 눈에 띄게 크게 보이진 않지만, 4 버전대는 ANSI로 프로그램을 작성했다면, 5 버전대는 유니코드로 프로그램을 재 작성했더군요.

 

덕분에 기존 로컬라이징한 파일을 UTF-8로 올리는 수고를 해야 했지만, 좀 더 다국어를 잘 지원할 수 있게 되었군요.

 

하루만에 번역해서 올려놓는 바람에 바쁘긴 했지만, 이렇게 안 해놓으면 다음번 버전업 시에 설치 패키지에 한글이 안들어간답니다.

 

저작자 표시
신고

'WinSCP' 카테고리의 다른 글

WinSCP 5.7 한국어 번역 완료  (2) 2015.02.23
WinSCP 5.0.6 Beta 한국어 작업 완료  (0) 2015.02.04
Posted by 서프리

MS VS 2008부터 MFC Feature Pack을 지원합니다.


Doc-View 형태의 응용프로그램을 만들면 MFC Feature Pack에서 제공하는 OutlookBar 와 Docking Pane를 이용할 수 있습니다. OutlookBar와 Docking Pane의 레이아웃은 자동으로 저장되고 로드 됩니다.

매우 편리한 기능이긴 하지만 또한 매우 불편한 기능입니다. 물론 이 레이아웃 상태에 대해서 커스터마이징을 할 수 있는 여지를 두었군요.

MFC Feature Pack으로 Doc-VIew 응용프로그램을 생성할 시 기본 App 클래스는
CWinApp에서 CWinAppEx로 변경됩니다.
CWinAppEx에서 이 상태 저장 및 복구를 하는 군요.
CWinAppEx의 메소드 중 다음 메소드를 주의해서 보시면 됩니다.

  • CleanState(): 레이아웃 상태를 모두 초기화 한다.
  • LoadState(): 레이아웃 상태를 로드한다.
  • SaveState(): 레이아웃 상태를 저장한다.

위와 같은 메소드가 있지만 CleanState() 정도가 유용하게 쓰일 수 있을 것 같습니다.

 

CWinAppEx를 상속받은 클래스의 InitInstance()에서 SetRegistryKey() 구문 다음에 CleanState()를 호출하면 항상 레이아웃이 초기화한 상태로 표시되게 됩니다. 레이아웃을 로드하는 시점은 ProcessShellCommand()에서 프레임워크상 자동으로 로딩되게 되어 있습니다.

또한 이 레이아웃 자동 저장이 필요없다면 CWinAppEx의 다음 메소드를 오버라이딩 합니다.

virtual void OnClosingMainFrame(CFrameImpl* pFrameImpl);

기본 동작은 SaveState() 메소드를 호출합니다.

 

그러므로 레이아웃 자동저장이 되지 않게 하기 위해서는 OnClosingMainFrame()메소드를 오버라이딩하여 빈 구문으로 놓으면 레이아웃이 자동으로 저장되지 않습니다.

 

저작자 표시
신고

'개발 > Windows' 카테고리의 다른 글

MFC FeaturePack CDockablePane 상태 관련  (0) 2015.02.04
Posted by 서프리

ActiveX를 만들때 매개변수로 배열을 받아야 할 필요가 있다.

많은 일련의 데이터를 한번에 받기 위해서 보통 문자열에 분리자(Separator)로 분리해서 문자열로 입력하는것이 보통인데
배열을 받는 방법은 없을까 해서 알아보았다.
일단 먼저 웹 스크립트에서 배열을 사용하는 방법을 알아보자. 배열은 다음과 같이 쓸수 있다.
자바 스크립트라면,

또는 VB Script라면,

 

이 배열을 ActiveX의 매개변수에 어떻게 넣느냐가 문제이다.

 

일단 기본 데이터 형식은 아니기 때문에, VARIANT 형식으로 받아야 하겠다. 
ActiveX의 메소드는 다음과 같이 정의를 하도록 하자.
void ShowArray(VARIANT varArray)

 

나는 VS2003을 쓰는데, 휴.. MFC ActiveX에서 이렇게 메소드를 만들자마자 버그코드를 만들기 시작한다.
IDL의 선언은 void ShowArray(VARIANT varArray); 로 정의되고,
컨트롤 소스에는 void ShowArray(VARIANT varArray);로 정의되었다. ㅠㅠ
컨트롤 소스가 잘못 생성되어서 나왔다. 일단 void ShowArray(LPVARIANT varArray); 로 정의를 변경해야 한다.
이놈의 VS2003 버그..ㅠㅠ 너무 많다..

 

배열을 VARIANT값으로 입력을 받을때 Java Script(JScript)와 VB Script는 다른 형식으로 입력된다.
Java Script(이하 JScript)는 VT_DISPATCH 형식으로 들어오고,
VB Script는 VT_ARRAY | VT_BSTR | VT_BYREF 형식으로 들어온다.

 

VB Script 배열 형식을 받아서 처리할 수 있는 예제는 인터넷에 널려있을것이다.
문제는 JScript 배열 형식을 받아서 처리하는 예제는 찾기가 어렵다.(나만 못찾는건지.)

 

일단 JScript 배열을 처리하려면, JScript 배열의 길이를 알아야 하지 않는가? 다음은 배열의 값이 접근을 할 수 있어야 하고...
JScript의 배열의 길이와 값에 접근 하기위해서는 다음과 같이 코딩해야한다.

 

void TestOCX::ShowArray(LPVARIANT varArray)
{
	CComVariant vtSource;
	// VT_BYREF 형식으로 입력되면 REF 값을 VARIANT로 복사한다.
	// VB Script 배열 형식은 VT_BYREF를 포함하므로 이걸 없앤다.
	::VariantCopyInd(&vtSource, varArray);
	// Variant 형식이 VT_DISPATCH인지 확인한다.
	if(VT_DISPATCH == (VT_DISPATCH & V_VT(&vtSource)) )
	{
		COleDispatchDriver disp;
		// COleDispatchDriver에 Attach한다. MFC는 좋은 클래스들을 많이 갖고 있다.
		disp.AttachDispatch(vtSource->pdispVal, FALSE);
		
		try
		{
			DISPID diLength;
			LPOLESTR length = L"length";
			long nArrayLength = 0;
			// Dispatch에서 length의 DISPID를 구한다.
			hr = disp->m_lpDispatch->GetIDsOfNames(IID_NULL, &length, 1, LOCALE_USER_DEFAULT, &diLength);
			if(FAILED(hr))
			{
				FireError(E_INVALIDARG, "매개변수 입력이 잘못되었습니다.");
			}
			
			// length의 속성값을 획득한다.
			disp.GetProperty(diLength, VT_I4, &nArrayLength);
			
			// 배열 길이 만큼 for문 돌면서 배열 값 출력
			for(int i = 0; i < nArrayLength; i++)
			{
				DISPID diIndex;
				TCHAR szIndex[20];
				CComBSTR bstrIndex;
				CComVariant vtData;
				
				// 배열 인덱스 속성값은 문자열로 지정하면 얻을 수 있다.
				// L"0", L"1", L"2" 처럼.

				StringCchPrintf(szIndex, 20, "%d", i);
				bstrIndex = szIndex;

				// 배열 인덱스의 DISPID를 얻는다.
				disp.m_lpDispatch->GetIDsOfNames(IID_NULL, &bstrIndex, 1, LOCALE_USER_DEFAULT, &diIndex);
				
				// 배열 값을 VARIANT 형식으로 받는다.
				disp.GetProperty(diIndex, VT_VARIANT, &vtData);
				
				// 예제에서는 배열의 값이 항상 문자열이여야 한다.
				if( VT_BSTR != V_VT(&vtData) )
				{
					FireError(E_INVALIDARG, "문자열 배열만 입력 가능합니다.");
					break;
				}
				
				//배열의 값을 각각 메세지 박스로 출력한다.
				AfxMessageBox(CString(vtData.bstrVal));
			}
		}
		catch(CMemoryException *pEx)
		{
			// 메모리 예외 처리 : 예제에서는 그냥 ReportError 및 FireError로 처리
			pEx->ReportError();
			FireError(E_OUTOFMEMORY, "메모리 오류입니다.");
			pEx->Delete();
		}
		catch(COleException *pEx)
		{
			// OLE 예외 처리 : 예제에서는 그냥 ReportError 및 FireError로 처리
			pEx->ReportError();
			FireError(pEx->m_sc, "OLE 오류입니다.");
			pEx->Delete();
		}
		catch(COleDispatchException* pEx)
		{
			// OLE Dispatch 예외 처리 : 예제에서는 그냥 ReportError 및 FireError로 처리
			pEx->ReportError();
			FireError(pEx->m_scError, "OLE Dispatch 오류입니다.");
			pEx->Delete();
		}
	}
}

 

예제를 보면 JScript 배열이 어떻게 구성되어 있는지 볼 수 있다.

 

여기서 특이한 점은 속성값의 DISPID이다.

TRACE를 따라가다보면 알겠지만, 배열의 크기가 3이라고 할때, length의 DISPID는 4값이면, "0"~"2"까지의 DISPID는 1~3 이다.

 

그럼 DISPID 0값은 무엇일까?

 

DISPID 0값은 "1, 2, 3" 이런식으로 모든 배열의 데이터가 ","로 분리되어서 나온다.

 

DISPID 5,6 값이 VT_DISPATCH로 되어 있고, 각각 constructor, prototype이라는 속성이 지원되는데, javascript 객체의 생성자와 객체의 재정의에 관련된 내용이여서 배열을 받는데 크게 사용되진 않는다. 

 

위의 JScript 예제에서

 

alert(arrArray);

 

라고 하면 DISPID 0값이 나오는 것으로 확인할 수 있겠다.

 

실제 작성한 코드는 VARIANT 형식으로 배열(JScript와 VBScript 상관없이) 또는 한개의 문자열을 받는 메소드 이지만 그중에서 JScript 처리 부분만 간추려서 올린다.
저작자 표시
신고
Posted by 서프리
2015.01.30 14:31

Apache Commons 개발/Java2015.01.30 14:31

Java를 시작한지 얼마 되지 않았다.

기존에 하던 방식과 다르게 Java는 참 많고 유용한 Open Source가 존재한다.

 

대표적인 것이 Apache Common이다. 현재 보고 있는 것은

  • Common Pool
  • Common Daemon
  • Common DBCP

언제쯤 적용해보려나?

저작자 표시
신고

'개발 > Java' 카테고리의 다른 글

Apache Commons  (0) 2015.01.30
Posted by 서프리
2014.01.03 15:39

SyntaxHighlighter 적용 테스트 기타2014.01.03 15:39

SyntaxHighlighter 테스트.

 

정말 설정하기 어렵구나.

 

그러나 드디어 했다. 만세!!

/* test */
int main()
{
    printf("%d", 1);
}
저작자 표시
신고

'기타' 카테고리의 다른 글

Asus 노트북 AS  (0) 2016.02.26
SyntaxHighlighter 적용 테스트  (0) 2014.01.03
Posted by 서프리
2014.01.03 15:13

Internet Explorer 개발2014.01.03 15:13

Internet Explorer 8 버전이 나오면서 탭 브라우징을 지원하였습니다.

탭 브라우징은 Frame 윈도우와 Tab 윈도우를 별도의 프로세스로 구현하게 되어 있습니다.

여기서 Tab마다 같은 프로세스가 실행되게 하려면 다음 레지스트리 값을 변경해야 합니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main 키의 TabProcGrowth 값을 DWORD값 1로 설정하면 같은 Tab 윈도우가 같은 프로세스 내에서 동작하게 됩니다.

또한 이 설정은 사용자 레지스트리에 역시 저장됩니다.

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main키의 TabProcGrowth입니다.

IE9 버전이 나오면서 Windows Vista 이상에서 LCIE라는 구현으로 인해 IEFrame과 Tab상의 프로세스 권한이 다르게 설정이 되었습니다.

 

신고
Posted by 서프리
2012.12.20 18:17

Cryptography API: Next Generation CNG2012.12.20 18:17

한동안 Windows API에서 암호와 관련된 부분을 보지 않았는데 앞으로 천천히 보면서 정리해볼 생각입니다.

우선, 많이 늦었으나 Windows Vista 부터 새롭게 추가된 보안 API인 CNG에 대해서 살펴 보기로 하겠습니다.

CNG(Cryptography API: Next Generation)의 전체 이름은 상당히 거창하게 되어 있다. 번역 해보면 차세대 암호 API 정도 되겠다. 기존에 있던 CryptoAPI의 단점을 보안하여 Vista에서 부터 새롭게 추가된 API 집합인 듯 합니다.

이전에 포스트한 링크에 보면 개략적인 내용이 친절하게도 한글로 잘 번역되어 테크넷과 MSDN매거진에 나와있고 물론 이해하기 쉽게 되어 있습니다.

CNG는 기존에 Windows 운영체제에서 제공하던 CryptoAPI를 장기적으로 대체하기 위해 탄생되었다. CNG는 여러 수준에서 확장성 있고 암호화 동작을 알 수 없도록 설계되었습니다.

암호화 동작을 알 수 없도록 설계되었다는 말은 참 아리송한 말이지만, 암호화에서 중요한 키를 중심으로 생각하면 이해될 것 같습니다. 암호에서 키는 매우 중요한 역할을 합니다. 암호 알고리즘 역시 중요하지만 기본적으론 키를 가장 중요하게 생각합니다. 키가 있어야만 암호문을 풀 수 있으며, 암호 알고리즘의 설계 역시 신뢰의 기본은 키로 생각하고 있습니다. 키가 중요하기 때문에 키가 어디에 위치하게 되어 있는지 또는 역분석이나 메모리 분석을 통해서 키를 알아내는 행위에 대해 암호 API는 방어를 해야하는데 이러한 부분에 대해서 설계가 되어 있다는 이야기 인것 같습니다. 영어로는 cryptography agnostic이라고 간단하게 써놓았네요.

CNG는 인터넷과 같이 보안 되지 않은 매체를 통해 문서 및 다른 데이터들을 생성하고 교환할 때 응용 프로그램 개발자가 안전한 환경에서 사용할 수 있도록 만들어 졌습니다. CNG를 사용하려는 개발자는 C와 C++ 프로그래밍 언어와 Windows 기반 프로그래밍 환경을 잘 알고 있어야 하지만, 암호화와 보안과 관련된 지식은 도움은 되지만 꼭 필요하진 않습니다.

CNG 암호 알고리즘 제공자(Cryptographic algorithm provider) 또는 키 저장소 제공자(Key storage provider)를 개발하려면 Microsoft connect에서 CPDK(Cryptographic Provider Development Kit)를 다운받아야 합니다. Microsoft connect는 Live ID로 로그인 해야 하며, 다운로드에서 Cryptographic Provider Development Kit 다운로드를 선택해야 합니다.

런타임 요구사항은 Windows Vista와 Windows Server 2008 운영체제부터 지원되네요. 이하 운영체제는 여전히 CryptoAPI를 사용해야 합니다.

이전 CryptoAPI에서 암호 알고리즘을 추가하려면 CSP(Cryptographic Service Provider)를 모두 구현해야 했는데 CNG부터는 알고리즘만 따로 추가할 수 있도록 변경된 모양입니다. CSP에서는 키 저장소 및 알고리즘을 모두 구현해야 했습니다. 좀 더 유연한 구조로 변경된 것 같군요.

다음에는 실제로 어떻게 쓰는지를 확인해 봐야겠습니다. 이전 CryptoAPI를 위한 CSP를 구현할때는 개발툴이 Windows 2000에서만 구현하고 테스트 할 수 있었는데, CNG는 한번 해봐야겠군요.

신고

'CNG' 카테고리의 다른 글

Cryptography API: Next Generation  (0) 2012.12.20
Windows CNG(Cryptography Next Generation) 관련 링크  (0) 2012.12.20
Posted by 서프리


티스토리 툴바