2015년 12월 3일 목요일

Windows 10 에서 오래된 hlp 파일 보기

조건:
Windows 7 에서 잘 동작하던 hlp 파일을 windows 10 으로 업그레이드후에는 열수가 없다.
기존 윈도우 백업에 있는 Windows.old/Windows/winhlp32.exe 는 잘 동작한다.

1. 기존 Windows.old/Windows/winhlp32.exe 파일을 적당한 위치(c:/temp)로 복사한다.

2. Win10-Hlp32-Fix.cmd 파일을 같은 폴더에 만들고 아래와 같이 넣는다.
@echo off
set crtpth=%CD%
takeown /f "%windir%\winhlp32.exe" >nul
icacls "%windir%\winhlp32.exe" /grant *S-1-5-32-544:F >nul
copy /y "%crtpth%\winhlp32.exe" %windir%
icacls "%windir%\winhlp32.exe" /setowner "NT Service\TrustedInstaller" >nul
echo.
echo Done.
echo.
echo Press any key to Exit
pause >nul
exit

3. Win10-Hlp32-Fix.cmd 파일을 관리자 모드로 실행시킨다.
   잘 동작하면 끝.



4. hlp 파일을 열때 9009 에러가 발생하면, 기존 Windows.old/Windows/ko-KR/winhlp32.exe.mui 파일을 Windows/ko-KR 로 복사한다.


끝.

2015년 7월 21일 화요일

수비드 장치 만들기

최현석 셰프의 "수비드공법 삼겹살 만드는 법" 을 보고 나도 따라 하고 싶어서
집에 있는 튀김기에 물을 넣고 테스트해보니 +-10도 정도 오차가 나더군요.
그래서 옆에 앉아서 온도계를 보면서 수동으로 3분마다 5초씩 전원을 켰다고 껐다가 하니
오차는 +-0.5도 정도로 줄었지만, 사람이 할 짓이 아니더군요.

수비드 기계를 사려고 했는데 잘 팔지도 않고 가격도 비싸서 만들기로 했습니다.
수조와 히터 역할을 하는 튀김기는 있으니까
전원을 껐다가 켜줄 릴레이와 온도계, 컨트롤러만 있으면 됩니다.
국내에서 이것들을 사려면 5만 원을 훌쩍 넘어가더군요.

알리로 GO GO.
아두이노 우노 R3 호환품 $2.98
2.4인치 터치 LCD 디스플레이 $4.87
온도센서 DS18b20 $1.64
릴레이 $1.5
합계 $10.99. 다음 달 카드 명세를 보니까 12,419원이네요.

모두 다른 판매자로부터 구매했는데 무료배송 상품만 골랐습니다.
국내는 배송비만 최소 2,500원인데, 알리는 중국에서 오면서도 무료이지만
배송에 4주 걸렸습니다. ㅠㅠ





컨트롤러로 사용할 아두이노 우노 R3 호환품은 이탈리아 정품과 비교하면 살짝 다른데
좌우에 핀 구멍이 있어서 작업하기에 상당히 편리합니다.




요건 MADE IN ITALY 입니다. 광센서 테스트중.

LCD는 아두이노 우노랑 핀맵이 같아서 그냥 올리면 됩니다.
* LCD를 사용하기 위해서는 Adafruit_GFX, SWTFT, TouchScreen 라이브러리가 필요한데,
  에서 얻을 수 있습니다.





온도센서 DS18b20 는 4.7K 저항으로 풀업해서 핀A5 에 연결했습니다.
* 온도값을 얻기 위해서 OneWire 라이브러리를 사용했습니다.
전선 3가닥(+5V, GND, 제어선A5)을 보드에 납땜하면 되지만 사용의 편의를 위해서
이어폰 잭을 이용해서 분리할 수 있도록 했습니다.




릴레이 제어를 위해서는 핀0, 핀1을 사용했습니다.
하나의 핀만 사용해도 됩니다. 저는 그냥 2개 사용했습니다.
* 핀0,1 은 프로그램 다운로드용으로 사용하기 때문에 일반적으로 사용하지 않습니다.
  빈 곳을 찾다 보니까 이곳을 사용하게 되었네요.
전선 4가닥(+5V, GND, 제어선0, 제어선1)은 보드에 납땜했습니다.
히터로 사용할 튀김기가 220V, 3.7A 를 사용하기 때문에 이 정도면 충분합니다.




휘리릭 연결해서 테스트해보니까 +- 0.1도 정도로 조절 됩니다.
온도계 정밀도가 1/16도 이기 때문에 더 높은 정확도는 어렵습니다.
* 디지털 온도계이긴 하지만 정확하지는 않습니다. 반드시 켈리브레이션이 필요합니다.
  제가 구매한 놈은 25도에서는 정확하지만 60도에서는 0.15도 낮은 값이 나왔습니다.



마지막으로 튀김기에 보드를 탈착할 수 있도록 만들었습니다.


전면에 보드 연결을 위한 소켓을 만들고





후면에 온도 센서를 위한 이어폰 소켓을 달고




완성!

2015년 6월 17일 수요일

원주율을 계산해보자.

간단한 방법으로 원주율을 계산해봤습니다.
많이 알려진 방법이지만 직접 해보는 게 중요하니까요.


정의:
반지름 1인 원의 면적은 π.

방법:
위 그래프를 아주 작게, 가로 세로 n 개로 나눠서 원점(0,0)에서 거리가 1 미만이면 원에 포함 되는 것으로 한다.

double CalcPi (int n) { // n : 분할 개수
double dv, da, pi, x, y;
  dv = 2.0 / n; // 나눈 점의 크기
  da = dv * dv; // 나눈 점의 면적
  pi = 0; // 원의 면적
  for (x = -1; x < 1; x += dv) { // x 축으로 n 번
    for (y = -1; y < 1; y += dv) {    // y 축으로 n 번, 총 n*n 번 계산
      if (x*x + y*y < 1) { // 원점에서 거리가 1 미만이면
      pi += da; // 면적 추가
      }
    }
  }
return pi;
}

결과:
10 개로 분할 (백 번 계산)
printf ( "π = %f\n", CalcPi (10) );
π = 3.000000
100 개로 분할 (만 번 계산)
printf ( "π = %f\n", CalcPi (100) );
π = 3.135600
1,000 개로 분할 (백만 번 계산)
printf ( "π = %f\n", CalcPi (1000) );
π = 3.141364
10,000 개로 분할 (일억 번 계산)
printf ( "π = %f\n", CalcPi (10000) );
π = 3.141587
100,000 개로 분할 (백억 번 계산)
printf ( "π = %f\n", CalcPi (100000) );
π = 3.141592

백억 번 계산하면 컴퓨터가 힘들어합니다.
4년 된 i5-2430M 노트북으로 24초 걸렸습니다. ^^;

* * *

6월 18일 추가



최적화를 조금 넣었습니다.원의 1/4만 계산하고, 불필요한 계산을 빼서 복잡도를 O(n) 으로 줄였습니다.

double CalcPi2 (int n) {
    int n2, pi, x, y;

   n2 = n*n;
    pi = x = 0;
    for (y=n; 0 < y; y--) {
        for (pi+=x; x < n; x++) {
            if (x*x + y*y <= n2) pi++;
            else break;
        }
    }
    return pi*4.0/n2;
}

10,000 개로 분할 (만 번 계산)
printf ("π = %f\n", CalcPi2 (10000));
π = 3.141591

2015년 5월 19일 화요일

포토샵 투명도 조절


Step1. 투명하게 만들기

화면 우측 하단의 LAYERS 창에서 Fill 수치를 100% 에서 원하는 정도로 변경합니다.

Before
After

Step2. 다시 불투명하게 만들기

상단메뉴 - Layer - Layer Mask - From Transparency 선택



Form Transparency 를 선택하면 우측 하단의 LAYERS 창에 Alpha 채널이 기존 그림의 우측에 선택된 채로 표시됩니다.
(혹시 선택이 안되었다면) 우측 Alpha 채널 그림을 마우스로 클릭해서 선택하고나서,

Ctrl+L 을 눌러서 Lavels 창을 엽니다.


Adjust highlight input level 값을 적당히 조절합니다.
위에서 알파를 50% 줬으니까, 여기서는 127을 주면 완전 불투명이 되겠죠.
그냥 'Auto' 눌러도 됩니다.


다시 불투명한 그림이 되었습니다.
마지막으로 우측하단 LAYERS 의 Alpha 채널에서 우측 버튼을 누르고


Apply Layer Mask 를 선택하면 완료!

2015년 4월 10일 금요일

인터넷에서 이걸 봤다.

인터넷에서 이걸 봤다.

출처: 사진에 있음.

우와~ 대박.
나도 그려봐야지.

나는 TI-89 가 없는데?
그럼 만들어야지.



C 를 꺼내서 뚝딱뚝딱.



void Draw2XGraph (double a, double b, double c) {
double x, y;
for (x=X1; x<X2; x+=STEP) {
if (x*x <= b) {
y = a * sqrt(b-(x*x))+c;
DrawPlot (x, y);
}
}
}

void Draw1XGraph (double a, double b, double x1, double x2) {
double x, y;
for (x=x1; x<x2; x+=STEP) {
y = a * x + b;
DrawPlot (x, y);
}
}

void Draw () {
Draw2XGraph (+1, 16, -6);
Draw2XGraph (-1, 16, -6);
Draw2XGraph (+1,  9, +1);
Draw2XGraph (-1,  9, +1);
Draw2XGraph (+1,  4, +3);
Draw2XGraph (-1,  4, +3);
Draw1XGraph (+1, -3, +3, +6);
Draw1XGraph (-1, -3, -6, -3);
}

<일부코드는 생략>


짜잔~~~




이거 올린사람 나와!