2015년 9월 25일 금요일

unsecapp.exe 와 Visual Studio 2005 (VS2005)

unsecapp.exe 가 프로세스 목록에 있길래 google로 찾아봤다.

별다른 것은 아니라고 했다. MS에서 만든 것이라고 하며, 프로그램 중에서 호환성 문제를 일으킬 수 있는 프로그램이 있으면 이 process가 떠서 호환성 문제를 해결해 준다고 한다. 그런데, 그런 프로그램 중에 MS 자신의 VS2005 도 포함되어 있다고 한다.... ㅋ 이것이 맞을까?

출처는
http://www.neowin.net/forum/topic/549443-what-is-unsecappexe/
이고,

  • Philosophizing Developer
Posted
From Bobster's description, it sounds like it may start automatically if Windows notices there's an application with known compatibility problems running. Sort of a helper process to resolve these issues perhaps? And it may "disappear" if you don't run any such programs. I know Vista has a list of programs with known compatibility problems. Microsoft's own Visual Studio 2005 is among them. :p When you start such programs, you usually get a dialog box warning you about that though.

라는 게시 글에 있는 내용이다.
_

asin(double) 함수 사용 주의! 간단한 나눗셈도 정말 주의! 컴퓨터 만든 사람들이 싫다.

문제를 내 보자... 컴퓨터로, 성능 좋은 32bit/64bit PC 용으로, 수학 함수 하나를 계산해 보자.

제목에 있는 asin 함수이다. 수학에서 arcsine (아크사인)함수라고 하는 정말 유명한
삼각함수인 sine 함수(sin) 의 역함수이다.

#include <math.h>
...
double asin_result = asin( 1.44 / 2.0 / 0.72 );

...

자, 이제 정답은?  너무 쉽다고?
웬만한 중학생이라도 암산으로 풀 수 있는 문제를 왜 여기에 올렸냐고?

해 봐라... 컴퓨터로... 좋은 컴퓨터를 사용하시라...

1.44 / 2.0 / 0.72
를 먼저 계산해야 하겠지....

이 값이 1 이라고 하는 사람 있겠지?

컴퓨터는 이 계산을 뭐라고 할까? 1 ? 아니다. 비슷하지만, 절대로 아니었다.
정답은?
컴퓨터의 계산:
1.44 / 2.0 / 0.72 == 1.0000000000000380
웃긴다고? 이게 현실이다. 이 글을 읽는 사람들은 웃고 있을 수 있지만,
이 글을 쓰고 있는 글쓴이는 자신이 심혈을 기울여 만든 산업용 소프트웨어에서 벌어진 황당한 정보 처리 결과에 아주 큰 금전적, 기술적 신뢰의 타격을 받고 있다. 밤새서 찾아도
30시간 정도 걸려서 겨우 찾아냈다.
그리고, 뭐 아주 작은 차이니까 무시할 수 있지 않냐고?
그래, 1.0과  1.0000000000000380 은 정말 작은 차이이다.

그러나, 이 다음 단계부터 파탄은 시작된다.

asin( asin_arg = 1.0000000000000380 ) == asin_result == -1.#IND000000000000

이런, 이게 도대체 무슨 숫자냐? 나름 이공계를 공부/전공한다는 사람도
이런 숫자를 처음 보는 사람도 있을 것이다.

-1.#IND000000000000

컴퓨터가 이런 값을 계산할 수나 있는 것일까?
무슨 의미인가?

이후는... 컴퓨터 프로그래밍 언어의 설명서를 아주 열심히 찾아 보시기 바란다.
이런 파탄을 당하지 않기 위해서 열심히 살기를 바란다.

_

2015년 9월 23일 수요일

nsmail 무엇?

email client 를 사용하고 있는데, thunderbird를 사용하고 있다.
첨부 파일에   .nsmail.jpg 라고 나오는 것이 보였다.
이것이 무엇인지 _(구글검색: nsmail )_ 해 보니,
서로 관련 없어 보이는 것이 몇 가지가 나오는데, 그 중에서는 내게 관련 있는 것일 듯
한 것이
https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=0CE8QFjAGahUKEwjN-rPYtI7IAhXj4aYKHe0yA3g&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFile%3ANSMail.png&usg=AFQjCNHHyQKawM0vi8ZCYuUTaXkf7DHAvw

https://en.wikipedia.org/wiki/Netscape_Mail_%26_Newsgroups

https://en.wikipedia.org/wiki/File:NSMail.png


이었다. 그림을 보니 딱 알겠었다.  NetScape MAIL (넷스케이프 메일)이라서
nsmail 이었다는 것....
Mozilla의 thunder_bird _도 이 넷스케이프 메일에서 파생된 것이니까. ...



그 외에는 내것과 관련 없는 것으로는
Network Solutions 에서 서비스하고 있는 메일 서비스가 있는 모양이다.
확실한 것과 자세한 것은 잘 모르겠다.


_

google hangouts 다른 2개가 있다??

하나는 한국 계정?
https://chrome.google.com/webstore/detail/hangouts/knipolnnllmklapflnccelgolnpehhpl?utm_source=chrome-app-launcher-info-dialog

이것은 소개가 한국어로 되어 있고, 크기 정보는 912KB

하나는 미국 계정?
https://chrome.google.com/webstore/detail/hangouts/nckgahadagoaajjgafhacjanaoiihapd?utm_source=chrome-app-launcher-info-dialog

이것은 소개가 영어로 되어 있고, 크기 정보는 293KB

동작도 다른 방식이다.
한국어.. 는 트레이에 올라오지 않는다. 설정하는 것도 없다.
영어... 는 트레이에 올라오는 기능이 있고, 이 기능을 설정/해제 하는 선택도 가능하다.

만든 날짜와 버전 번호, 는 둘이 똑같고,
제공하는 곳은
한국..은    google.com 제공
이라고 적혀 있고,
영어...는   offered by google.com
이라고 적혀 있다.
헷갈리고 복잡하다.....


_

2015년 9월 16일 수요일

요즈음 윈도의 시작메뉴 폴더 위치

예를 들어, Evernote는, ...
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Evernote\Evernote.lnk
이다.
다른 것들은 그 근처..??

_

2015년 9월 5일 토요일

개인적으로 오래된 C언어(헤더 파일; 전처리기) 문제??

대학교2학년에 (1990년이다) 교재로 사용해서 공부했던 자료구조론 책이 있었다.
원서였고,
ISBN 0-201-16116-8
인 (Van Wyk, Christopher J.) 이 쓴, Data structures and C programs
라는 책이었다. 이 책의 맨 뒷부분의 부록C (Appendix C)에는 이 책에서
쓰인 예제 소스코드(source code)에 사용된 (header file)이 나온다.
그런데, 여기에는 여기 자체에서도 언급되었던 문제가 있었다. 내용은 딱 1쪽이므로, 간단하니까 일단 그대로 적어보자.

/C/ Our Header File
--
Here is a listing of the file ourhdr.h
#include <stdio.h>
extern char *malloc( );
extern char *strchr( ), *strdup( ); 
#define demand(fact, remark)  {\
if(!(fact)) {\
fprintf(stderr, "demand not met:   fact\n"};\
fprintf(stderr, "remark\n"};\
abort( );\
exit(1);\
}\
typedef int boolean;
#define FALSE 0
#define TRUE     !FALSE
--
If your C compiler will not replace macro arguments that lie inside strings, rewrite demand() to accept remark as a string argument.
--
번역하면,
(첫줄) 여기에 ourhdr.h 파일의 내용 목록이 있다.
(본문은 소스코드이므로 한국어 번역 안한다.)
(마지막) //만약 당신의 C 컴파일러가 문자열 내부에 위치한 (매크로 인자)(macro argument)를 치환하지 않는다면, demand( )를 (문자열 인자)(string argument)를 받아 들이도록 다시 만드시오.
(끝)

그렇다. 이 책이 쓰여진 때는 1988년(책 맨 앞의 출판 정보에 나온 것)이고, 이때만 해도,
ANSI C 라고 불리던 C89 표준이 나오기 전이라서, 여기에 나온 demand( ) 매크로는 우리가 공부할 때에 사용한 그 때의 최신 컴파일러에서...
 "문자열 내부에 위치한 (매크로 인자)를 치환하지 않는"
작동을 했고, C 언어에 아주 짧은 지식만 가지고 있던 나는 아직도 이 문제를 해결하지 못하고 있다.

그 당시 나는 원하던 전공 공부를 거의 완패인 수준으로 실패하고 있었고, 대학교에 들어가기 전에 BASIC, FORTRAN, PASCAL, Apple 2 컴퓨터의 기계어 등을 미리 열심히 공부해 알고 있었지만, C 언어는 그저 기존의 언어와 비슷하구나 라고만 수박 겉핡기로 구경만하고 깊이 알지 못했던 나로서는 도저히 풀 수 없는 문제였다.
그 당시에 이 과목을 같이 듣자고 했던 친구가 이 문제를 물어봤을 때에 나는 그저 고개를 갸웃거리며, 아무 말도 못했었다.
그리고, 그로부터 10년 후에 직업으로 프로그램을 짜기 시작한 지가 15년이 넘고 있지만, 이런 상황은 일을 하면서도 부딪히기가 드문 상황이어서 아직도 고개를 갸웃거리고 있다. (25년 넘게...)
그런데, 며칠 전에 다른 문제로 구글에 질문을 하다가, GCC의 전처리기에 # 연산자와 ## 연산자가 여기에서의 상황에 쓰일 수 있다는 것을 알게 되었다.

https://gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/Stringification.html#Stringification

원래 답변은 구글 검색
_(구글:  # and ## in c macros )_ 했다.

http://stackoverflow.com/a/217181

그렇다면,... 이 25년 넘은 문제의 해답은???
일이 바빠서 하지 못하고 있다... OTL
이 일요일날 새벽에 밤 새워 일하다가 답답해서 여기에 적어본다.
-