Lyn
조회 수 3757 추천 수 0 댓글 0
Atachment
첨부 '4'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

네. 요즘 고해상도 디스플레이(맥북 프로 레티나 라거나, 4K 모니터 라거나, 아니면 Razer Blade나 Aorus X3 Plus 같은) 디바이스가 꽤 늘어 났습니다.

이런놈들 말이죠


dpi3.png


dpi4.png






하지만 윈도는 고해상도 지원 꽤 느린편이어서 Vista 부터 일단 지원은 햇지만 거의 쓰이지 않았고 본격적인 지원은 역시 8 부터라고 보이는데요. 뭐 사실 윈도 7이 나온 2009년보다도 한참 지난 2012년 맥북 프로 레티나 부터 PC/랩탑용 고해상도 디스플레이가 등장 했으니 그러려니 합니다.


어쨋든 중요한건 이제 저런 장비를 쓰는 사람들도 있고 하니 고 DPI 지원을 해야 한다는거겠지요.
그러려면 DPI 를 가져와야 하는데 그 방법중 하나인 Direct2D 를 이용한 방법을 간단히 정리 해 둡니다.


개발자 답게 코드부터 보자면 

#include <iostream>
#include <D2d1.h>

using namespace std;

#pragma comment(lib, "D2d1.lib")

void wmain()
{
    ID2D1Factory* pD2DFactory = nullptr;
    if (SUCCEEDED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory)))
    {
        float dpix, dpiy;
        pD2DFactory->ReloadSystemMetrics();
        pD2DFactory->GetDesktopDpi(&dpix, &dpiy);
        pD2DFactory->Release();

        wcout << L"X : " << dpix << endl << L"Y : " << dpiy << endl;
    }
    else
    {
        wcout << L"Direct 2D Create Error";
    }    
}

라는 대단히 심플 한 코드로 가져올 수 있습니다.

D2D 팩토리를 생성후 ReloadSystemMetrics 호출 후 GetDesktopDpi 를 통해서 가져오는 매우 심플한 방식인데, ReloadSystemMetrics  를 하지 않으면 팩토리 생성 후 변화된 Dpi 설정을 가져오지 못합니다(내부에서 캐시하는듯)


dpi1.png




위와 같은 실행 결과가 나옵니다. 윈도우의 기본 DPI(100%) 값은 96 으로서 이는 23인치 FullHD에 맞도록 세팅 된 값입니다(사실 "현재까지 쓰인 일반적인" 모니터의 크기와 해상도라면 대부분 매칭 됩니다. 17인치 1280*1024 도 96DPI 입니다)

그럼 125%로 바꿔서 한번 테스트 해 보겠습니다.

dpi2.png


 

네. 96 * 1.25 = 120 이니까 정확히 나오네요.

 

당연하겠지만 Direct2D 를 사용 한 방식이므로 Windows Vista Sp2 or Higher 를 요구합니다.

TAG •
?

Lyn
조회 수 3632 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Windows 는 Vista 부터 고 DPI 지원을 하기 시작 했는데, 이게 버전마다 좀 차이가 있다.

 

Vista : DPI 변경시 재부팅 필요함

7 : DPI 변경시 로그아웃 필요함

8 : DPI 변경시 로그아웃 필요함.

8.1 : DPI 변경시 로그아웃 필요 없음!!!

 

여기서 중요한 이슈가 발생 하는데, 8.1에서 로그아웃이 필요 없다는 것은 프로그램 실행중에 DPI 가 바뀔 수 있다는점이다. 결국 MS는 이 문제를 해결하기 위해 메시지 하나를 추가하는데 바로 WM_DPICHANGED 이다. 당연하겠지만 Windows 8.1 이상에서만 발생하며, Windows SDK 도 8.1 이상을 써야한다(뭐 어차피 달랑 정수값 하나니 그냥 선언해서 써도 되긴 하지만 ...)

 

 

참조 : https://msdn.microsoft.com/en-us/library/windows/desktop/dn312083(v=vs.85).aspx

TAG •
?

Lyn
조회 수 3407 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

type in console : Diskperf -Y

 

restart task manager

?

2016.01.03 11:53

VMWare 12 + Windows 10 Bug

Lyn
조회 수 3379 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

VMWare 12에 Windows 10 을 올리면 OS에서 CPU 갯수를 인식하지 못하는 버그가 있습니다.

 

vm.PNG

 

위 스샷처럼 VMWare 에서 2 Processor * 1 Core 로 세팅을 하면 OS의 작업관리자에선 1Socket * 1 Virtual Processor 로 잡힙니다.

반대로 1 Processor * 2 Core 로 세팅하면 작업관리자에서도 정상적으로 잡힙니다.

vmw.PNG

 

 

어느쪽 버그인진 모르겠지만 주의해야 할 점입니다.

TAG •
?

Lyn
조회 수 3366 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

오오 멋지다...

안드로이드 허니콤 이후로는 블록킹 되는 네트워크 함수를 UI Thread에서 호출하면 android.os.NetworkOnMainThreadException 가 발생한다.

병신같은 코드를 양산하는 개발자들을 막기위해 플랫폼 차원에서 강제한것.



테스트 코드를 만들 때 조차 완전한 형태의 코드를 만들어야 해서 귀찮지만, 평균적인 App의 퀄리티를 올리기 위한 아주 좋은 선택이었다고 생각한다.
MS도 이런걸 해 줫으면 좋았을텐데.
TAG •
?

Lyn
조회 수 3310 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

https://www.jetbrains.com/resharper-cpp/

구매 해서 사용해보고 후기 한번 올려 보겠습니다.

 

과연 Visual Assist 를 대체할수 있을까?

?

Lyn
조회 수 2979 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Go to Control Panel -> Network and Internet -> Network Connections

 

001.png

 

Click Advanced -> Advencad Settings...

 

002.png

 

change order at first list

?

Lyn
조회 수 2967 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

컴퓨터의 발전과 함께 발전해온 것 중 하나가 바로 폰트(Font) 이다.

컴퓨터를 초창기에는 계산용으로 사용했고, 그 다음으로 컴퓨터가 널리 보급 된 이유는 역시나 사무용이다. 타자기를 대체하기 위한 WordProcessor 라는 프로그램이 등장 한 이후, 압도적인 수정/복제의 편리함으로 타자기를 순식간에 밀어내고 컴퓨터가 널리 쓰이게 되었는데, 타자기에서 절대 흉내낼 수 없었던 워드프로세서의 장점 중 하나가 바로 다양한 폰트를 사용 할 수 있다는 것이다.

 

당연히 많은 폰트가 개발 되어 왔고, 프로그래머들은 그 폰트를 담을 파일 포맷 역시 설계해야 했다.
 

초창기에는 컴퓨터 모니터의 해상도가 워낙 낮았고, PC 성능또한 처참했기에 폰트 하나하나를 픽셀로 표현하는 방법을 사용했다. 바로 비트맵 폰트 라고 하는 녀석인데, 이것은 FON 확장자를 사용한다.
하지만 출력물의 해상도는 당시에도 모니터보다 훨씬 높았기 때문에(이것은 현재에도 대부분의 경우 마찬가지다. 자세한것 후술) 비트맵 폰트로는 좋은 출력물을 얻을 수 없었으며, 그 연구의 결과물이 바로 Adobe 가 만든 PostScript 포맷이다.
 

그 이후 애플이 Adobe에 대응하기 위해 새 포맷을 만들었는데, 바로 트루타입 폰트이다. PS 와 한가지 다른 특징을 가지고 있는데, 바로 2차원 베지어 곡선을 이용한다는 점이다. 이는 용량,속도에서 장점이 있고, 해상도가 낮은 모니터에서도 비교적 깔끔하게 보이는 특징이 있다. 나중에 LCD 같은 고정밀도의 디스플레이에 대응하기 위해 힌팅이 추가되었다(MS에서는 ClearType 이란 이름으로 XP 이후부터 지원한다). 확장자는 TTF 를 사용한다. TTF는 패밀리 폰트(이탤릭, 굵게 등등..) 을 넣을 수 없으므로, TTF 여러개를 묶는 컨테이너 포맷이 등장하게 되는데 이 포맷의 확장자는 TTC를 사용한다.

 

90년대 들어와서 MS는 새 파일 포맷을 만드는데, PS와 TTF 의 장점만을 취한 포맷으로 확장자는 OTF이다. PS 처럼 3차원 베지어 곡선을 사용하고, 자체적으로 패밀리 폰트를 지원한다. 3차원 베지어 곡선을 사용하므로 속도가 느리고 용량도 크며, 모니터에서는 곡선의 복잡도로 인해 제대로 표현히 되지 않는다는 단점이 존재한다. 주로 PS와 마찬가지로 출력물에서 사용한다.

 

그 외 HFT 같은 한컴에서 만든 폰트 포맷도 존재한다.
 

그러나 2015년 현재 시점에는 굉장히 아이러니한 상황이 벌어졋는데, MS Windows 에서 가장 많이 쓰는 포맷이 Apple 이 만든 TTF 이고, Apple OSX 에서 가장 많이 사용하는 포맷이 MS가 만든 OTF이다 (....) 
또 디스플레이도 상황이 많이 달라졋는데, "일반적인" 출판물의 DPI 는 지금도 300정도로 변함이 없지만, 스마트폰의 경우 500이 넘는 무식한 PPI를 지원하는 녀석들이 등장했다. 마찬가지로 PC에서도 250PPI를 넘는 디스플레이들이 많이 등장했는데, 당장 지금 본인이 쓰는 노트북만 해도 13.9인치 크기에 3200*1800 해상도를 자랑한다. 비교적 "저해상도" 를 지원하기 위한 기술들이 디스플레이가 고해상도화 되면서 난감한 상황이 된것. 이 상황이 오면서 가장 치명타를 입은게 MS Windows 인데, Windows 는 속도와 가독성 양쪽을 다 잡기 위해 2차원베지어곡선을 이용하는 TTF 포맷을 쓰면서 강력한 힌팅 알고리즘과 데이터를 이용해 가독성을 올리는 방법을 택했기 때문이다. 하지만 그대로 해상도가 깡패인 (...) 환경에서 이런 알고리즘은 도움이 되지 않았고, OS의 폰트가 전체적으로 예쁘지 않게 보이는 결과를 낳게 되었다(구형 맥을 보면 생각보다 폰트가 안이쁜걸 알 수 있다... 폰트가 정말 이뻐진건 레티나 디스플레이 장착한 머신 부터. 논리 해상도를 1440*900으로 1/4토막을 내면서 까지 극단적으로 폰트의 미려함을 추구한 OS이다). Windows 8 이후 추가된 UWA(윈도우 10 이전엔 Modern UI 라고 불럿다)에서는 결국 다른 방법으로 랜더링한다. ClearType 은 낮은 해상도에서 높은 가독성을 얻기 위함이지 높은 해상도에 최적화된 방법이 아니었기때문에..

?

Lyn
조회 수 2777 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

가장 큰게 512bit 인증서를 더이상 받아들이지 않는다.

인증서 사이즈 오류라고 그냥 뱉어 버리고 HandShake 오류 남.

 

1024bit 나 2048bit 인증서 써야함.

?

Lyn
조회 수 2579 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

게임 결제 한번 하기 힘드네요....

 

Untitled.png

 

TAG •
?

Lyn
조회 수 2533 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

add compile option flag /d2Zi+

 

맨날 까먹어서 저장용으로

?

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

https://support.microsoft.com/en-us/kb/3080351

 

물론 일반적인 경우는 까놓고 말해 10으로 안올라 가는게 바보입니다. 특수목적일 경우만 설치하세요.

?

Lyn
조회 수 2503 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

윈도 10을 쓰고 있다가 어느날 게임을 하려는데 그래픽드라이버에 문제가 있는것을 발견했습니다.

그래서 드라이버를 다운그레이드 했는데... 이 빌어먹을 윈도 업데이트가 자동으로 드라이버를 올려버리는겁니다 (...)

그래서 방법을 찾다보니, 아래와 같은 툴을 MS가 제공 하고 있습니다.

드라이버 업데이트를 선택적으로 끌 수 있게 되어 있네요.

 

.. 다행입니다.

 

https://support.microsoft.com/en-us/kb/3073930

TAG •
?

Lyn
조회 수 2403 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

https://www.visualstudio.com/visualstudio-release-event-vs

 

많이 봐주세요

TAG •
?

Lyn
조회 수 2354 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Decorator border = VisualTreeHelper.GetChild(listViewName 0) as Decorator;
ScrollViewer scrollViewer = border.Child as ScrollViewer;
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + 1);

 

ListView 의 ScrollBar 는 저렇게 2단계를 거쳐서찾아 올 수 있고, ScrollToVerticalOffset를 이용 하여 Item 단위로 스크롤을 조절할 수 있다.

TAG •
?

Lyn
조회 수 2319 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

lastest nginx for ubuntu 14.04 compile with older version openssl then not support ALPN.

Unfortunately, chrome is not support http2+NPN, only support http2+ALPN. 

require recompile nginx with new version openssl

 

Original : https://alex.bouma.me/recompile-nginx-with-openssl-1-0-2-for-http-2-via-alpn-ubuntu-14-04/

 

# Install package building tools
sudo apt-get install -y dpkg-dev

# (optional) cleanup previous work directory
#sudo rm -R /opt/nginx

# Create a work directory
sudo mkdir /opt/nginx

# Switch to our work directory
cd /opt/nginx

# Get NGINX source files
sudo apt-get source nginx

# Install NIGNX build dependencies
sudo apt-get -y build-dep nginx

# Switch to the source files directory
# You might need to change the version number in your case
cd nginx-1.*

# Build the .deb package files
sudo dpkg-buildpackage -b

# Move back to out work directory where the .deb files are placed
cd /opt/nginx

# Stop NGINX
sudo service nginx stop

# Install the newly build .deb file
sudo dpkg --install nginx_1.*~trusty_amd64.deb

# Start NGINX
sudo service nginx start

?

Lyn
조회 수 2269 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

정말 오랫만에 로우레벨 관련 질문을 받았습니다...

바로 아래 코드에서

 

#include <smmintrin.h>

int main()
{
    __m128i m_128i;
    m_128i.m128i_i16[0] = 0;

    for (int i = 0; i < 15; i++)
    {
        auto a = _mm_extract_epi8(m_128i, i); // <-- 컴파일 에러
    }
}

 

error C2057: expected constant expression 에러가 발생 한다는 얘기입니다.

 

_mm_extract_epi8 의 prototype 을 확인 해 보면 extern int   _mm_extract_epi8 (__m128i /* src */, const int /* index */); 입니다. 일반적으론 변수 -> const 로의 변환은 자유로우므로 문제가 없어야 하는데... 오류가 나죠.

 

원인은 간단한데 _mm_extract_epi8 는 C++의 "함수" 가 아니라, 기계어와 매칭되는 Intrinsics 입니다. 저게 선언되어있는 헤더가 smminstrin.h 라는 것에서도 알 수 있지요. 해당명령어는 intel 명령어이니 intel 사이트에서 한번 해당 내용을 검색 해 봅시다

 

inst01.PNG

 

 

몇가지 정보가 나오네요. 해당 Intrinsics 에 대응되는 어셈블리는 pextrb r32, xmm, imm 이고, SSE4.1 지원이 필요하며, Latency 는 CPU 종류에 따라 2~3 클럭이네요.

 

여기는 Visual Studio 에 들어있는 헤더와 달리 각 파라메터에 이름이 붙어있습니다. a, 와 imm8 이네요.
그럼 imm8 은 뭐냐가 중요해지는데, 이 imm은 이름만 보면 무슨 레지스터 비슷한걸로 착각 할 수도 있는데, 실제로는 Immediate value 의 약자입니다.
한자로는 즉치값(즉시 계산되는 값) 이라고도 하는 것 같은데 C++ 프로그래머 입장에서 보자면 컴파일타임에 계산하여 결정이 가능한 상수(const) 를 이야기 합니다. 8은 뭐냐구요? 걍 bit 수 입니다. 저 값은 8bit 범위에서 작동한다는 거죠. 즉 imm8 을 풀어서 써보면 8-bit immediate value 라고 할 수 있겠습니다.

 

그럼 결론을 내보자면. Intrinsics 를 호출 할때는, C++의 호출/캐스팅 규칙 보다 CPU 명령어의 제약사항이 우선하며, _mm_extract_epi8 의 2번째 argument는  Immediate value 일 것을 요구하므로 변수를 사용할 수 없습니다.

 

기왕 하는김에 하나 더 해보자면, imm8 이라고 되어있긴 하지만, 128bit 변수를 8bit 단위로 쪼개서 값을 읽는 명령이므로, 실제 imm8의 사용 범위는 0~15 일 것입니다. 그런데 만약 그 이상의 값(ex : 16) 을 넣으면 어떻게 될까요?

 

 inst02.PNG

 

다행히도 컴파일러는 해당 명령어의 허용 범위를 알고 있으므로 

warning C4556: value of intrinsic immediate argument '16' is out of range '0 - 15' warning 을 띄워 줍니다.

 

TAG •
?

Lyn
조회 수 2233 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

인증서는 wosign 에서 무료 3년짜리를 받았고,

 

Windows + Apache => IIS => Linux + Apache 를 거쳐 현재는 서버를 Linux + Nginx 로 돌리고 있으므로 ...

 

아래와 같이 세팅합니다.

 

80번 포트로 들어 오는건 https 로 리다이렉트 되도록...

 

http2 도 세팅 할까 했는데... 서버의 nginx 버전이 낮아서 실패. 다음에 업그레이드 할때를 노리기로.

 

server {
  listen        443 ssl;
  server_name   lunapiece.net;

  access_log    access.log main;
  error_log     error.log error;
  
  ssl                   on;
  ssl_certificate       /etc/nginx/conf.d/CRTFILENAME.crt;
  ssl_certificate_key   /etc/nginx/conf.d/KEYFILENAME.key;
}

server {
    listen       80;
    server_name  lunapiece.net;
    rewrite ^ https://$server_name$request_uri? permanent;
}

TAG •
?

2016.09.07 12:01

where check http/2 online

Lyn
조회 수 2216 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

https://tools.keycdn.com/http2-test

?

Lyn
조회 수 2214 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

OS보다 조금 일찍나오는군요.

 

http://blogs.msdn.com/b/somasegar/archive/2015/06/29/save-the-date-visual-studio-2015-rtm-on-july-20th.aspx

 

?

Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
/ 8