2012-02-29

PrimoPDF

PrimoPDF는 가상의 프린터로 등록되어, 종이가 아닌 PDF파일로 출력한다.
Chrome에도 PDF로 인쇄 옵션이 있기는 하지만 네이버 시작페이지를 만들어본 결과
7.48MB라는 큰 사이즈로 생성되었다.

PrimoPDF는 5가지(Screen, eBook, Print, Pregress, Custom)의 이미지 압축(손실)에 대한 셋팅이 있다.
(동일 페이지를 PDF파일로 변환했을 때 파일 사이즈는 아래를 확인)
Screen   = 340KB
eBook    = 344KB
Print    = 358KB
Pregress = 414KB


 Screen, eBook은 눈에 띌 정도의 이미지 손실이 있었고, Print 이상은 손실이 거의 없었다.
(Screen, eBook 옵션은 녹색 NAVER로고가 단색인데, 손실이 가장 눈에 띄었다.)

단점은 Chrome의 "PDF로 인쇄"는 약 1초만에 파일을 생성했지만,
PrimoPDF는 이미지에 대한 프로세싱이 있기 때문인지, 4~10초 가량 걸렸다.


PrimoPDF 링크 : http://www.primopdf.com/download.aspx

2012-02-21

윈도우 업데이트(.NET Framework관련 업데이트) 블루스크린

증상:
윈도우 업데이트(.NET Framework 관련)를 받으면, reboot할 때 블루스크린이 뜨고 "성공한 이전 구성"을 선택하기 전까지 정상적인 윈도우 진입을 할 수 없다.
부팅을 하게되는 다른 업데이트를 할 때도 동일 증상이 나타날 수 있다.

원인:
.NET Framework가 무언가 꼬여서 문제가 된다.
제어판에서 모든 .NET Framework를 언인스톨 하고(프로그램 추가/제거에서 보이지 않는 1.0은 생략해도 되고, 1.0을 제거하기 위해서는 msicuu2.exe가 필요함)
다시 설치한다.
제 경우는 1.0제외하고 모두 제거(1.1, 2.0, 3.0, 3.5, 4.0)하고 다시 설치(1.1, 3.5, 4.0).
3.5 버전은 2.0과 3.0을 포함하고 있으므로 3.5만 설치하면 된다.

--
이후 업데이트 후 재시작 때 블루스크린이 뜨던 문제는 사라졌지만...
1.0 서비스팩 부분 업데이트에 계속 실패가 떴다.
http://support.microsoft.com/kb/976982/ko를 참고해, 복구 시도.
1. Microsoft Fix it 50123
(http://go.microsoft.com/?linkid=9666880) 
2. dotnetfx_cleanup_tool.zip
(http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-08-90-44-93/dotnetfx_5F00_cleanup_5F00_tool.zip)

2012-02-08

fastping, 네이글 알고리즘

온라인 게임을 즐기는 사람이라면 한번 쯤 들어봤을 fast ping이라는 프로그램.
플레이어가 입력한 명령이 네트워크를 빠릿빠릿하게 지나가서 게임 케릭터의 반응속도가 올라가게 되는데, 
"안쓰다 쓰면 잘 못느끼고, 쓰다 안쓰면 더럽게 느리다"라는 얘길 한다.
확실한 차이가 있고 필수가 되어가는 프로그램, 하지만 몇가지 사용하기에 껄끄러운 문제가 있기도 하다.


첫번째 문제는...

사용자 역시 게임에 이용이라는 목적이 있기 때문에 해커들의 대상이 되기 쉽고 해킹툴이 깔리는 경우도 꽤 되는 것으로 안다.(게시판에 올라오는 자료 말고, 해당 프로그램의 정식 홈페이지에서 받아야함)



두번째 문제는

fastping, fastaping, 님아즐 이런 프로그램들이 무료로 배포되고 있으며 초기에 없던 광고표시야 당연하지만, 스폰서의 악성프로그램을 마구 설치하고 있는 이상한 프로그램들도 많아져 문제가 된다.(님아즐은 깨끗했다)


세번째 문제는
큰 문제는 아니다, 컴퓨터 업그레이드를 하고 OS는 다시 설치하지 않은 상태로 사용하는 사람들에겐 fastping을 실행했지만 전혀 적용이 안된 상태가 된다.
Ethernet(NIC)이 바뀌면(메인보드가 다른 것으로 바뀌거나..) 이전 사용하던 Ethernet쪽에 fastping 설정이 적용이 되고, 정작 진짜로 사용중인 Ethernet은 적용이 안되어 있다.
메인보드를 교체했거나 랜카드를 교체했다면 registry에 들어가 지금 사용중인 Ethernet에 fastping이 설정이된건지 확인을 해봐야 한다.

<이런 모든 문제에서 자유로운 직접 수정하기>
실행 -> regedit.exe
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters]
"TCPNoDelay"=1 생성
(패킷이 일정 사이즈 이상이 될 때까지 기다리지 않음)

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{??-??-??-....}]
????는 인터넷에 연결된 자신의 IP가 "IPAddress"와 같은 폴더에 아래 값 생성(IP는 실행 -> CMD -> ipconfig로 확인)
(메인보드만 교체하고 OS는 다시 설치하지 않은 경우, 프로그램으로 적용시 이전 NIC에 값을 바꿔 실제론 적용이되지 않는 경우가 있음.)
"TcpAckFrequency"=1

"TcpDelAckTicks"=0
(패킷전송/응답에 지연시간을 두지 않음)

부작용은 네트워크에 부하를 줄이고 네트워크 상에 패킷의 수를 줄이기 위해 고안된 네이글 알고리즘을 사용하지 않는 것이므로
반응 속도는 빨라지지만 전체적인 다운로드 속도나 인터넷의 속도는 느려질 수 있다(=안느려질 수도 있고, 느려져도 얻는 것에 비해 문제가 되진 않는다.)

참고: http://technet.microsoft.com/en-us/library/bb463205.aspx

SSD 용량 다이어트 및 mklink 활용

(Windows 7, 64bit 기준으로 작성)
당연한 얘기지만 일반 HDD인 D드라이브가 있어야함.
아래에선 모든 폴더를 D드라이브에 몰아넣었지만, Temp폴더와 인터넷 cache는 램드라이브를 사용하는게 성능향상에 좋음.
유저 파일 생성과 삭제가 잦은 사용자라면 Program Files, Program Files (x86)처럼 변경이 적은 폴더와 Users, Downloads처럼 분산이 잘 일어날 폴더들을 다른 드라이브로 분리하는 것이 좋음.
레지스트리에 있는 폴더값을 변경 했었으나, 프로그램 사용중 파일을 로드할 때나 탐색기로 접근할 때 프리징현상을 경험해 변경하는 부분을 뺌.
프리징이라고 표현한 현상은 XP시절 Explorer 프로세스가 먹통이 되던 때와 같으며 프로세스 종료후 프로세스를 다시 실행해도 해결되진 않음.
한번 발생하면 시스템을 재시작할 때까지 지속됨.
--

기본 설정
1. AHCI 사용
2. powercfg -h off
3. 페이징파일 위치 변경
4. Superfetch 사용 안함

폴더 복사와 링크 (작업에 주의)
5. 폴더 복사 및 mklink
6. 환경변수 TEMP, TMP 값 변경
7. IE temporary 폴더 수정
8. Program Files, ProgramData 레지스트리 수정
9. Users 레지스트리 수정

----------------------------------------------
1. AHCI 사용
SSD를 사용하면 SATA 모드를 AHCI를 사용하길 추천하고 있다.
CMOS 셋업에서 SATA 모드가 기본값인 IDE로 되어있을 탠데, AHCI로 변경하면 된다.
주의할 점은 이미 IDE모드로 윈도우를 인스톨 했다면, 블루스크린이 뜬다.
또는 CMOS가 리셋되서 기본값인 IDE모드로 돌아갔다면, AHCI로 변경해줘야 정상적으로 윈도우가 뜬다.
이미 IDE모드에서 윈도우를 설치했다면, AHCI모드로 변경하고 윈도우를 다시 설치하거나
윈도우 재설치 없이 하는 방법도 있긴하다.
재설치 없이 적용방법은 CPU에 따라(AMD냐 Intel이냐에 따라) 달라지며, 지면상 이 글에서는 다루지 않음.

2. powercfg -h off
최대 절전모드일 때 임시저장소로 사용될 파일로 보이는 c:\hiberfil.sys 파일을 삭제하기 위해, 최대절전 모드를 끈다.
실행-> cmd (엔터를 치기전 cmd아이콘에 오른쪽 클릭 "관리자 권한으로 실행" -> powercfg -h off

3. 페이징 파일 위치 변경
Windows 가상메모리 파일(=페이징 파일)인 c:\paging.sys를 c드라이브가 아닌 다른 드라이브에 관리하기 위해 설정 변경
시스템 등록 정보-> 고급 -> 성능 옵션 -> 가상 메모리 -> c드라이브 "페이징 파일 없음" -> 설정 클릭-> e드라이브 "사용자 지정 크기 처음 크기=최대 크기=8192" -> 설정 클릭
가상메모리는 처음 크기와 최대 크기가 같아야 파일 사이즈가 변하지 않아, 디스크에서의 위치가 변하지 않는다(데이터 분산으로 인한).
일반적으로 자신의 시스템 메모리의 1.2~1.5배 정도 설정해준다고 외우고 있지만(최악으로 시스템 메모리가 부족해 전체 메모리를 스왑할 때, 시스템 메모리 보다 커야 문제가 없다고 하지만 이런 상황을 만나 본적은 없다. 아주 작은 메모리 스왑이라도 일어날 정도면 요즘엔 메모리가 싸서 업그레이드를 한다.)
1배로 설정을 하든.. 1/2로 하든 문제되진 않는다. 다만 시스템 메모리가 많이 여유가 있어도 가상메모리가 없으면 오류 표시하고 실행을 중단하는 프로그램이 있어 가상메모리가 아예 없는 것은 문제가 될 때가 있다.
시스템을 리붓하면 c:\paging.sys가 삭제되고 e:\paging.sys가 생성되어야 하지만
가끔 c:\paging.sys가 삭제되지 않는 경우가 있으니 시스템, 히든 파일을 확인해봐야 한다.
삭제하려고 해도 삭제가 되지 않을 땐, 다시 사용자 지정크기로 적당한 값을 줘서 설정했다가 "페이징 파일 없음" 설정을 하고 리붓하면 삭제되어 있다.

4. Superfetch 사용 안함
Windows 7의 인덱스 기능, 컴퓨터를 사용하지 않을 때 인덱싱을 위해 디스크를 읽는다.
SSD에서는 성능향상에 큰 도움이되지 않으므로 끈다.
(일반 하드디스크를 사용할 때도, 자리에 앉아 눈으로만 보고 조작을 하지 않고 있으면, 인덱싱 하느라 드르륵 거려 컴퓨터의 반응속도가 느려지므로 끄는 편이다. 곰플레이어에서 영화보고 있는데, 시간 지나면 프레임 뚝뚝 끊겨 주기적으로 마우스를 움직여본 사람이라면 이것 때문)

5. 폴더 이동 및 링크
윈도우7 설치 CD나 USB로 부팅, UI가 뜨면 SHIFT+ F10 을 눌러 CMD창을 연다.


참고1) 아래는 파일 복사 -> 원본삭제 -> 원본이름의 링크 폴더 생성 순으로 진행한다.
참고2) D드라이브가 너무 많은 폴더가 생겨 가독성이 떨어지므로 액세스 필요성이 낮은 폴더를 모아 D:\Junctions 폴더로 묶었다.
참고3) NPKI는 "Program Files (X86)\NPKI"에 위치하도록 했다.
참고4) AMD, INTEL, 넷마블, PlayNC 같이 의도치 않게 C드라이브에 설치되지 않도록 링크를 미리 만들었다.
참고5) 환경변수의 Temp와 Tmp를 변경하지만, 절대경로를 그대로 쓰는 프로그램도 있어 링크를 생성했다.
참고6) Temp폴더는 요즘 저렴하게 대용량을 갖춘 시스템이 많은 만큼, 1~2GB 정도 램드라이브를 사용해 인터넷 cache와 Temp 저장 용도로 사용하면 성능향상에 좋다.

@echo off

rem ********************************
rem 복사
rem ********************************
c:
robocopy "c:\Users" "d:\Users" /e /copyall /xj
robocopy "c:\Program Files" "d:\Program Files" /e /copyall /xj
robocopy "c:\Program Files (x86)" "d:\Program Files (x86)" /e /copyall /xj
robocopy "c:\ProgramData" "d:\ProgramData"  /e /copyall /xj
robocopy "c:\Windows\Temp" "d:\Junctions\Temp"  /e /copyall /xj
robocopy "d:\Program Files\NPKI" "d:\Program Files (x86)\NPKI"  /e /copyall /xj
robocopy "c:\Windows\Downloaded Installations" "d:\Junctions\Downloaded Installations"  /e /copyall /xj
robocopy "c:\Windows\Downloaded Program Files" "d:\Junctions\Downloaded Program Files"  /e /copyall /xj
robocopy "c:\PerfLogs" "d:\Junctions\PerfLogs"  /e /copyall /xj
robocopy "c:\ATI" "d:\Junctions\ATI" /e /copyall /xj
robocopy "c:\AMD" "d:\Junctions\AMD" /e /copyall /xj
robocopy "c:\INTEL" "d:\Junctions\INTEL" /e /copyall /xj
robocopy "c:\Netmarble" "d:\Junctions\Netmarble" /e /copyall /xj
robocopy "c:\PlayNC" "d:\Junctions\PlayNC" /e /copyall /xj
robocopy "c:\Downloads" "d:\Downloads" /e /copyall /xj



rem ********************************
rem 삭제
rem ********************************


rmdir "c:\Users" /s /q
rmdir "c:\Program Files" /s /q
rmdir "c:\Program Files (x89)" /s /q
rmdir "c:\ProgramData" /s /q
rmdir "c:\Documents and Settings" /s /q
rmdir "c:\Windows\Temp" /s /q

rmdir "c:\Windows\Downloaded Installations /s /q
rmdir "c:\Windows\Downloaded Program Files" /s /q
rmdir "c:\Windows\Prefetch" /s /q
rmdir "c:\PerfLogs" /s /q
rmdir "c:\Netmarble" /s /q

rmdir "c:\PlayNC" /s /q
rmdir "d:\Program Files\NPKI" /s /q
rmdir "c:\AMD" /s /q
rmdir "c:\ATI" /s /q
rmdir "c:\INTEL" /s /q
rmdir "c:\Downloads" /s /q





rem ********************************
rem mkdir, 사용자에 따라 없을 수도 있는 링크 목적지 폴더 생성.
rem ********************************
mkdir "d:\Program Files (x86)\NPKI"


mkdir "d:\Junctions\Temp"
mkdir "d:\Junctions\PerfLogs"
mkdir "d:\Junctions\Netmarble"
mkdir "d:\Junctions\PlayNC"
mkdir "d:\Junctions\Downloaded Installations"
mkdir "d:\Junctions\Downloaded Program Files"
mkdir "d:\Junctions\Prefetch"
mkdir "d:\Junctions\ATI"
mkdir "d:\Junctions\AMD"
mkdir "d:\Junctions\INTEL"

mkdir "d:\Downloads"

rem ********************************
rem mklink
rem ********************************

mklink /j "c:\Users" "d:\Users"
mklink /j "c:\Documents and Settings" "d:\Users"
mklink /j "c:\Program Files" "d:\Program Files"
mklink /j "c:\Program Files (x86)" "d:\Program Files (x86)"
mklink /j "c:\ProgramData" "d:\ProgramData"
mklink /j "d:\Program Files\NPKI" "d:\Program Files (x86)\NPKI"
mklink /j "c:\Windows\Downloaded Installations"d:\Junctions\Downloaded Installations"
mklink /j "c:\Windows\Downloaded Program Files"d:\Junctions\Downloaded Program Files"
mklink /j "c:\Windows\Prefetch" "d:\Junctions\Prefetch"
mklink /j "c:\PerfLogs" "d:\Junctions\PerfLogs"

mklink /j "c:\AMD" "d:\Junctions\AMD"
mklink /j "c:\ATI" "d:\Junctions\ATI"
mklink /j "c:\INTEL" "d:\Junctions\INTEL"
rem /끝


6. Windows TEMP, TMP 환경 변수 변경
원래의 Windows 7으로 부팅 후

시스템 정보 -> 고급설정-> 환경 변수-> "%USERNAME%에 대한 사용자 변수"와 ""시스템 변수"의 TEMP, TMP 항목을 d:\Junctions\TEMP(윗 단계에서 만든 TEMP 폴더)로 변경

7. IE Temporary 폴더 설정 변경

익스플로러 -> 도구 -> 인터넷 옵션 -> 검색기록의 설정 -> 폴더 이동 ->
d:\TEMP\ie tmp(또는 개인에 따라 변경)

크롬은 바로가기의 대상에 --disk-cache-dir="d:\Junctions\Temp"옵션을 추가한다.
램드라이브를 사용한다면, 램드라이브로 설정하는 것이 좋다.

8. Program Files, ProgramData 레지스트리 수정
레지스트리 수정은 추천하지 않음.

9. Users 레지스트리 수정
레지스트리 수정은 추천하지 않음.


--
참고: 명령어 robocopy <-> xcopy
Windows vista부터 robocopy 지원
robocopy "c:\Program Files (x86)" "d:Program Files (x86)" /e /copyall /xj

  /E              하위 디렉터리 포함
  /COPYALL  모든 파일 정보를 복사합니다.
  /XJ             연결 지점을 제외합니다. 일반적으로 기본값으로 포함됩니다.


Windows XP 이하는 xcopy 사용
xcopy "c:\Program Files (x86)" "d:\Program Files (x86)" /e /c /q /h /k /o /x


  /E           디렉터리와 하위 디렉터리를 (비어 있어도) 복사합니다.
                 /S /E 스위치와 같으며, /T를 수정하는 데 사용될 수 있습니다.
  /C           오류가 생겨도 복사를 계속합니다.
  /Q           복사하는 동안 파일 이름을 표시하지 않습니다.
  /H           숨겨진 파일과 시스템 파일도 복사합니다.
  /K           특성을 복사합니다. 일반적으로 Xcopy는 읽기 전용 특성을 지웁니다.
  /O           파일 소유권과 ACL 정보를 복사합니다.
  /X           파일 감사 설정을 복사합니다(/O 의미).

User Shell Folders

아래의 내용은 문제될 것이 없다고 생각되었으나 항상 원복할 준비를 하길 바람.
특정 프로그램에서 폴더 접근시 교착상태가 자주 발생함을 경험함.
꼭 필요한 상황이 아니면 레지스트리 변경 없이 ,
mklink로 교차점만 사용하는 것이 좋을 것 같음.

--
레지스트리의 내용은 참고만 하길 바람.


현재 user shell dir
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"AppData"
"Desktop"
"Favorites"
"NetHood"
"Personal"
"PrintHood"
"Programs"
"Recent"
"SendTo"
"Start Menu"
"Startup"
"Templates"
"Local Settings"
"Local AppData"
"Cache"
"Cookies"
"History"
"Fonts"


All user shell dir
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Common Desktop"
"Common Start Menu"
"Common Programs"
"Common Startup"
"Common AppData"
"Common Templates"
"Common Favorites"
"Common Documents"

<경고: 레지스트리 수정은 문제가 생길 경우, OS를 재설치 해야할 만큼 치명적이므로 백업을 남겨두시길 바랍니다, -경험자>

ProgramFilesDir 수정

프로그램에서 특정 폴더 액세스 때, 교착상태 발생함을 경험함.
레지스트리 값은 참고만 하길 바람.


[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion],
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Profilelist]
 경로에 ProgramFilesDir을 수정(예: d:\Program files)하면, 앞으로 설치될 프로그램은 기본값으로 이 경로가 입력된다.
(64bit 버전은 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion,
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion \Profilelist)

mklink.exe로 교차점을 만든 링크에 설치를 해도 별 문제는 없지만,
catalyst control center가 설치에 문제가 없는데 실행이 안된다던지
알약의 백신 엔진을 업데이트 하려고 하는데 config.dat에 문제가 있다고 오류가 난다던지
하는 문제를 경험했다.
설치할 때 링크(교차점)을 사용하지 말고, 수동으로 실제 directory에 설치하면 해결이 된다.
매번 수동으로 수정하기엔 귀찮으니 ProgramFilesDir을 수정하길 추천함.

<경고: 레지스트리 수정은 문제가 생길 경우, OS를 재설치 해야할 만큼 치명적이므로 백업을 남겨두시길 바랍니다, -경험자>

2012-02-07

mklink.exe, junction.exe

태국홍수로 하드디스크 가격이 불안정해지고, 상대적으로 영향을 받지 않았던 SSD가 각광을 받고 있다.
하지만 아직 고가에 저용량인 SSD에 OS와 가장 자주 사용하는 프로그램 1~2개를 설치해 만족도를 높이고 있다.
인터넷에는 SSD 저장용량의 다이어트를 위해 powercfg -h off, paging.sys 다른 디스크에 설정 등 여러 가지 팁과 함께, OS의 사용자 디렉토리 변경, temporary directory 변경 등 여러 팁들이 공개되어 있다.
설치때 설정을 변경하는 방법들도 있지만, 단순히 교차점(하드링크)을 연결해 관리하는 방법이 편해, 관련 명령어인 mklink.exe와 junction.exe에 대해 정리를 한다.

1. mklink.exe
Windows Vista 부터 symbolic link와 hard link를 지원하는 mklink.exe가 포함됬다.

usage:
mklink /D <심볼릭링크> <대상>
mklink /H <하드링크> <대상>
mklink /J <교차점> <대상>

교차점(junction)은 하드링크와 같다.
하드링크는 다른 디스크에 링크를 걸 수 없지만, 교차점은 다른 디스크에 링크를 걸 수 있다.

2. junction.exe
Windows Vista나 Windows 7은 mklink를 사용하면 되지만, Windows XP에는 mklink가 포함되 있지 않아, junction.exe를 테크넷에서 다운받아 사용하면 된다.

usage:
junction <교차점> <대상>

테크넷 junction 링크: http://technet.microsoft.com/en-us/sysinternals/bb896768
테크넷 junction 다운: http://download.sysinternals.com/Files/Junction.zip

Junction v1.06 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

The first usage is for displaying reparse point information, the
second usage is for creating a junction point, and the last for
deleting a junction point:
usage: junction [-s] [-q]
       -q     Don't print error messages (quiet)
       -s     Recurse subdirectories

usage: junction
       example: junction d:\link c:\windows

usage: junction -d