input 문자열에 특수 문자가 있다면 isSpecial 에 true 가 반환된다.

string input = @"특수문자가 있습니까?!@#$%^&~.!";

bool isSpecial = Regex.IsMatch(input, @"[^a-zA-Z0-9가-힣]");

[^a-zA-Z0-9가-힣] 은 앞에 ^ 표시가 붙어 부정을 의미한다.

그러므로 a-zA-Z0-9가-힣 사이에 있는문자가 아닌게 있는지 확인하는 것이다.

 

제거는

input = Regex.Replace(input, @"[^a-zA-Z0-9가-힣]", "", RegexOptions.Singleline);

친구가

double value1 = 0.01;
double value2 = 0.05;
double resultValue = value1 + value2;

위 결과가 이상하게 나온다고하여 확인해 보니

0.060000000000000005 으로 결과가 나왔다.;;

그래서 좀 찾아보니 어쩔수 없는.. 부동소수점은 근사치를 나타내는거라 정확하지 않다고 한다.

참고 http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=10872&rssMode=1&wtype=0

 

위 결과를 제대로 나타내기 위해선 아래와 같이 두가지 방법이 있다.

1. decimal 자료형을 쓰는것이다. (C# 에서는 이방법을 추천)

decimal value1 = 0.01m;
decimal value2 = 0.05m;
decimal resultValue = value1 + value2;

 

원래 코드에 영향없이 하려면 아래 방법이 좋을것 같다.

double value1 = 0.01;
double value2 = 0.05;

decimal calValue1 = (decimal)value1;
decimal calValue2 = (decimal)value2;

double resultValue = (double)(calValue1 + calValue2);

 

2. double 형을 ToString() 해서 다시 double 로 변환을 해서 써도 된다.

double value1 = 0.01;
double value2 = 0.05;
double resultValue = Convert.ToDouble((value1 + value2).ToString());

추가로 다른 해결방법이 있을지는 모르겠다;

double/float 형으로 계산을 하는 경우는 주의를 해야할것 같다 자칫 잘못된 결과가 나올수 있기 때문이다.

C# 뿐만 아니라 모든 언어(IEEE 754따르는언어)에 해당된다고 한다.

 

참고

http://wiseheart-textcube.blogspot.kr/2006/07/c%EA%B3%BC-%EB%96%A0%EB%8B%A4%EB%8B%88%EB%8A%94-%EC%86%8C%EC%88%98%EC%A0%90-%EC%9D%B4%EC%95%BC%EA%B8%B03.html

https://stackoverflow.com/questions/8911440/strange-behavior-when-casting-a-float-to-int-in-c-sharp

결론.

const 컴파일 상수는 성능이 매우 중요하고 상수의 값이 절대로 바뀌지 않는 경우만 제한적으로 사용하는 것이 좋다.

 

readonly 런타임 상수는..

- const 에 비해 느리지만 유연성이 좋다.

- 어떤 타입과도 함께 사용할수 있다.

- 메서드내에서는 선언할 수 없다.

- 클래스별로 서로 다른 값을 가질 수 있다.

- 값을 변경 한 경우 리빌드 하지 않아도 런타임시 값을 참조하기 때문에 어샘블리만 리빌드 되어있으면 변경된 값을 가져올수 있다.

* 런타임에 값이 평가되어 값을 가지지 않고 상수에 대한 참조 컴파일 된다.

* 맴버 초기화 구문뿐 아니라 생성자를 통해서도 초기화 가능하다.

 

const 컴파일 타임 상수는..

- 속도가 빠르고 변경이 불가능하다.

- 내장자료형(primitive types)과 enums,string으로만 사용할 수 있다.

- const. 컴파일 타임 상수는 메서드내에서 정의될 수 있다.

- 하나의 값만 가질 수 있다.

- 값을 변경 한 경우 리빌드 해야함 참조한 프로젝트에서 변경된 값을 가져올수 있다.

 

1. 지역변수를 선언할 때는 var 를 사용하는 것이 낫다.

정확한 반환 타입을 알면 상관없지만 어설프게 정확한 반환타입을 알지 못한채 명시적 타입을 쓰게되면

득보다 실이 많다.

변수의 타입보다는 변수의 의미파악에 더 집중할 수 있게 한다.

가독성과 자동타입변환 과정으로 인해 버그를 만들수도 있지만

var 변수로 인해 가독성이 방해되는 코드라면 대부분

명시적으로 써도 가독성은 불편한건 마찬가지이다.

https://azure.microsoft.com/ko-kr/free/?OCID=AID631159_OLA_205134375_93384177

위 링크로 가면 마소계정으로 무료 체험하기 신청을 할수 있습니다. (이러다 대머리가 될수도..;;)

체험하기 버튼을 누르고

 

마소 계정으로 로그인합니다.

 

우선 전호번호로 인증코드를 받아야합니다.

 

동의 를 누르고 카드로 인증을 또 해야합니다.

추가 결제는 안되니 안심하고 등록합니다.

 

첫번째만 체크하고 등록 커튼 클릭합니다. 두번째도 원하면 체크하세요^^;

 

정보확인에 조금 시간이 걸립니다.

 

정보확인이 끝나면 위와같은 화면이 나오고 건너뛰고 AZure Portal 로 계속 진행하기 를 클릭합니다.

 

콘솔화면이 나타납니다.

 

기본적으로 화면의구성 내용은 아래와 같습니다.

 

1년간 사용할수 있는 무료크레딧 24만 크레딧을 줍니다.

 

2017/11/21 - [C#.NET/C#] - 카카오 쳇봇 만들기 - 1 (플러스친구 만들기)

2017/11/24 - [C#.NET/C#] - 카카오 쳇봇 만들기 - 2 (C# 서버 만들기)

 

이전 시간에 이어서 응답 가능한 쳇봇을 구성해보겠습니다.

응답가능한 쳇봇은 아래 처럼 구성이 되어야 한다고 나와있습니다.

https://github.com/plusfriend/auto_reply#52-메시지-수신-및-자동응답-api

우선 내 서버로 들어온 미디어 데이터는 내 서버로 바로 오는게 아니라 카카오 서버에 저장되어 넘어옵니다.

하지만 내 서버에서 보낸건 내 서버에만 저장됩니다.

 

위 그림에서 보듯이 사용자가 내 서버로 메세지나 미디어 정보를 보내면 위 처럼 데이터가 담겨서 넘어옵니다.

내 서버로 온 미디어 정보는 카카오 서버에 저장되어 넘어오므로 content url 에 카카오 서버 링크가 보여집니다.

위 정보를 토대로 Post 메서드를 구성해 보면..

주소가 message 로 끝나야하고 POST 메서드 이므로 아래 처럼 기본 구조를 갖습니다.

        [HttpPost]
        [Route("message")]
        public dynamic GetKakao_message([FromBody]dynamic value)
        {
            return null;
        }

json 형태로 넘겨야하기 때문에 그냥 Dynamic 을 리턴 타입으로 했습니다.

이제 value 에 위에서 제시한 user_key, type, content 값이 넘어오게 됩니다.

이제 이정보를 value 에서 꺼내야합니다.

쉽게 꺼내기 위해서 프로젝트에 Nuget 패키지 관리자 를 통해

Newtonsoft.Json 을 설치합니다.

using Newtonsoft.Json; 문을 추가한 후

아래처럼 꺼내올 구조를 정의하고

        public class KakaoModel
        {
            public string user_key { get; set; }
            public string type { get; set; }
            public string content { get; set; }
        }

아래 처럼 코딩하게되면 KakaoModel 에 데이터가 담기게 됩니다.

        [HttpPost]
        [Route("message")]
        public dynamic GetKakao_message([FromBody]dynamic value)
        {
            string valueString = JsonConvert.SerializeObject(value);
            KakaoModel postmodel = JsonConvert.DeserializeObject<KakaoModel>(valueString);
            string result = postmodel.content;

            return result;
        }

이제 사용자가 내 서버로 어떤 정보를 보내는지 알아내는데 까지 완료되었습니다.

이제 응답을 보내야합니다.

 

응답은 message, keyboard 형태로 응답할수 있습니다.

keyboard 는 버튼 형태로 결과를 주는 것으로 이전 포스팅에서 설명이 되었습니다.

여기서는 단순히 메아리 치는 즉 사용자가 보내는 메세지를 그대로 보내보도록 합니다.

        [HttpPost]
        [Route("message")]
        public dynamic GetKakao_message([FromBody]dynamic value)
        {
            string valueString = JsonConvert.SerializeObject(value);

            KakaoModel postmodel = JsonConvert.DeserializeObject<KakaoModel>(valueString);

            var result = new { message = new { text = postmodel.content }, keyboard = new { type = "text" } };

            return result;
        }

message 의 text 항목에 사용자가 보낸 메세지를 그대로 보냈습니다.

더 설명할건 없는것 같네요;

 

테스트 하기위해 폴더로 게시하고 IIS 올린 후

내 플러스친구와 대화를 나눠보면 아래와 같이 메아리? 치게됩니다.

(처음에 선택1,2,3 버튼이 나와 선택1을 선택하고 그 이후 메세지 보냄.)

 

 

2017/11/21 - [C#.NET/C#] - 카카오 쳇봇 만들기 - 1

 

이전시간에 이어 카카오 쳇봇 두번째 시간에는 서버를 만들어보겠습니다.

비쥬얼 스튜디오를 일단 열고

새 프로젝트를 만들어 아래와 같이 좌측목록에서 을 선택하고 우측에서 ASP.NET 웹 응용 프로그램 을 선택합니다.

아래와 같은 화면이 나오게 되는데 비어 있음 을 선택하고 Web API 는 체크하여 확인합니다.

그럼 아래처럼 프로젝트가 구성됩니다.

이제 카카오가 제시하는 호출 형식으로 웹서비스를 제공해야합니다.

아래처럼 Controllers 폴더 아래에 컨트롤러를 추가합니다.

읽기/쓰기 동작이 표함된 Web API 2 컨트롤러 를 선택하면 예시 코드를 볼수있어서

작성하는데 도움이 많이 됩니다.

도움이 필요없다면 Web API 런트롤러 - 비어있음 을 자신있게 선택하세요!!

컨트롤러가 추가되면 아래처럼 기본적인 Get Post Put Delete 메서드가 구현되어있습니다.

일단 이것을 참고하여 카카도톡이 제시한 http(s)://:your_server_url/keyboard 형식의 GET Method 를 구현해야합니다.

아래 설명에도 나와있지만 keyboard 는 채팅을 처음 시작할때 보여주는 메세지나 버튼을 처리하도록 합니다.

https://github.com/plusfriend/auto_reply#51-home-keyboard-api

GET 방식이므로 기본적으로 아래처럼 작성됩니다.

        [HttpGet]
        public dynamic GetKakao()
        {

            return null;
        }

json 형식을 처리하기위해 dynamic 으로 리턴처리가 되도록 하였습니다.

여기서 중요한건 http(s)://:your_server_url/keyboard 이런형태로 keyboard 로 주소가 끝나게 하여 호출이 되도록 해야합니다.

이를 위해선 [Route("keyboard")] 가 필요합니다.

        [HttpGet]
        [Route("keyboard")]
        public dynamic GetKakao()
        {

            return null;
        }

위처럼 하면 주소에 keyboard 로 호출하게되면 위 메서드가 타게됩니다.

이제 리턴을 아래 json 형태로 전달해야합니다.

{
    "type" : "buttons",
    "buttons" : ["선택 1", "선택 2", "선택 3"]
}

dynamic 을 이용해 위 형태를 만들어 보내면됩니다.

위 내용을 표현한다면 아래처럼 코딩하면됩니다.

            var result = new { type = "buttons", buttons = new List<string>() { "선택1", "선택2", "선택3" } };
            return result;

전체적으로 보면

        [HttpGet]
        [Route("keyboard")]
        public dynamic GetKakao()
        {
            var result = new { type = "buttons", buttons = new List<string>() { "선택1", "선택2", "선택3" } };
            return result;
        }

위처럼 됩니다.

이대로 IIS 올리게되면 플러스친구와 1:1 채팅을 하여 대화방이 열리면 버튼1,2,3 이 나타나게됩니다.

IIS 에 올리는 방법은 우선 빌드한 후 아래와 같이 프로젝트 우클릭 메뉴에서 게시 를 선택합니다.

IIS 에 바로 올릴수도 있지만 전 폴더로 빼서 직접 올렸습니다. 그래서 폴더를 선택하고

게시 버튼을 누르게 되면 게시가 진행됩니다.

게시가 완료되면 해당 경로에 아래처럼 파일이 생성됩니다.

이 파일을 그대로 IIS 에 올리면 됩니다.

IIS 올린 후

https://center-pf.kakao.com/login

으로 이동하여 이전에 추가했던 플러스 친구로 들어가서

좌측의 스마트채팅으로 들어간 후 우측의 API 형 의 설정하기 버튼을 클릭합니다.


아래와 같은 화면에서 API 테스트를 진행해야합니다.

IIS 주소를 넣고 API 테스트 버튼을 클릭하여 아래와 같이 OK 가 떨어져야 제대로 셋팅이 된것입니다.

이제 플러스 친구와 1:1 채팅을 하면 아래와 같이 버튼이 나타나게됩니다.

직접하면 시간이 길지 않은데 포스팅하니 글이 길어지는군요;;;

다음 시간에는 응답형 API 를 이용해 응답처리를 하는것을 해보도록 하겠습니다.

프로젝트 파일을 첨부하고 싶었으나 용량이 커서 안되는군요 ㅜㅠ

카카오 쳇봇을 하나 만들었습니다.

만드는 과정을 적어봅니다.

쳇봇을 하려면 서버도 필요하지만 먼저 카카오톡플러스친구 를 만들어야합니다

예전에는 옐로우 ID 였는데 바뀐것 같네요.

아래 링크로 접속합니다.

https://center-pf.kakao.com/login

플러스 친구 만들기 를 선택합니다.

카카오 계정으로 로그인합니다.

계정이 없다면 만들어야합니다. 간혹 전화번호만 가지고 사용하는 분들도 있더군요..

처음 사용하는거라 가져올 필요가 없습니다;

예전의 옐로 아이디와의 연동을 위한것 같습니다.

필요없으니 다시보지않기 체크 하고 닫기.

 

로그인이 완료되니 아래처럼 옐로우 아이디 시절에 만들었던게 하나 있었네요;;

일단 새로 만들꺼니 새 플러스친구 만들기 버튼을 클릭합니다.

 

플러스 친구 개설하기에서 추가할 쳇봇 관련 정보를 적습니다.

검색을 허용등을 설정하고 확인하여 완료합니다.

아래처럼 플러스 친구가 하나 만들어졌네요.

 

이제 왼쪽메뉴중에 스마트 채팅이라는 메뉴로 접근하여 API 형을 설정하게되면

내 서버로 수신을 받고 응답을 사용자에게 보낼 수 있게 됩니다.

 

설정하기 버튼을 누르면 아래처럼 앱 URL  란에 자신의 서버 주소를 넣어야합니다.

https://github.com/plusfriend/auto_reply

위 링크가 API 의 구성을 나타냅니다.

링크에 맞게 서버를 구성하면됩니다.

서버구성은 다음시간에~^^

 

https://support.microsoft.com/ko-kr/help/982760/install-modi-for-use-with-microsoft-office-2010

 

소개

MODI(Microsoft Office Document Imaging)는 Microsoft Office 2010에서 제거되었습니다. 이 문서에서는 컴퓨터에 MODI를 설치하기 위해 수행할 수 있는 방법을 제공합니다. 또한 특정 MODI 기능을 다시 얻기 위해 사용할 수 있는 대체 방법에 대해서도 설명합니다.

Microsoft Office 2010에서 사용할 수 있게 MODI(Microsoft Office Document Imaging)를 설치하려면 다음 방법 중 하나를 사용하십시오.

방법 1: MDI-TIFF 파일 변환기 다운로드 및 설치

MDI-TIFF 파일 변환기를 다운로드 및 설치하려면 다음 Microsoft 웹 사이트를 방문하십시오.

방법 2: SharePoint Designer 2007을 설치하여 MODI 설치

SharePoint Designer 2007은 Microsoft 다운로드 센터에 무료 다운로드로 제공됩니다. SharePoint Designer 2007을 다운로드하고 설치 중에 MODI만 포함하려면 다음과 같이 하십시오.
  1. 이 위치에서 SharePointDesigner.exe 파일을 다운로드하고 실행합니다.

    SharePoint Designer 2007 다운로드

  2. 소프트웨어 라이선스를 검토한 후 수락합니다.
  3. 사용자 지정을 클릭하여 설치 옵션을 엽니다.
  4. 설치 옵션 탭에서 아래쪽 화살표를 클릭하고 다음 세 가지 섹션에 대해 사용할 수 없음을 선택합니다.
    • Microsoft Office SharePoint Designer
    • Office 공유 기능
    • Office 도구

  5. Office 도구를 확장합니다.
  6. Microsoft Office Document Imaging 옵션에 대한 아래쪽 화살표를 클릭한 다음 모두 내 컴퓨터에서 실행을 선택합니다.
  7. 지금 설치를 클릭한 다음 닫기를 클릭합니다.
SharePoint Designer 2007 설치 동안의 MODI 위치를 표시하는 스크린샷:

SharePoint Designer 2007과 함께 MODI 설치


Microsoft Office Document Imaging을 시작하려면 다음과 같이 하십시오.
  1. 시작을 클릭한 후 모든 프로그램을 선택합니다.
  2. Microsoft Office를 클릭한 다음 Microsoft Office 도구를 선택합니다.
  3. Microsoft Office Document Imaging을 클릭합니다.

방법 3: 2007 Office System 미디어로 MODI 설치

2007 Office System의 MODI를 Office 2010과 함께 사용하려면 다음과 같이 하십시오.
  1. 2007 Office System 설치 프로세스를 시작합니다.
  2. 소프트웨어 라이선스를 검토한 후 수락합니다.
  3. 사용자 지정을 클릭하여 설치 옵션을 엽니다.
  4. 설치 옵션 탭에서 아래쪽 화살표를 클릭하고 모든 섹션에 대해 사용할 수 없음을 선택합니다.
  5. Office 도구를 확장합니다.
  6. Microsoft Office Document Imaging 옵션에 대한 아래쪽 화살표를 클릭한 다음 모두 내 컴퓨터에서 실행을 선택합니다.
  7. 지금 설치를 클릭한 다음 닫기를 클릭합니다.
2007 Office system 설치 동안의 MODI 위치를 표시하는 스크린샷:

Office 2007과 함께 MODI 설치


Microsoft Office Document Imaging을 시작하려면 다음과 같이 하십시오.
  1. 시작을 클릭한 후 모든 프로그램을 선택합니다.
  2. Microsoft Office를 클릭한 다음 Microsoft Office 도구를 선택합니다.
  3. Microsoft Office Document Imaging을 클릭합니다.
참고: Office 64비트 및 32비트 에디션의 병렬 설치는 지원되지 않습니다. Office 2010 64비트 에디션에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.

Office 2010 64비트 에디션


참고: Office 2007 미디어를 사용하여 MODI를 설치한 후에 Office 2010 복구를 수행해야 할 수 있습니다. 다른 버전의 Office와 함께 Office 2010을 사용하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.

2121447다른 버전의 Office를 실행하는 컴퓨터에서 Office 2010 제품군 및 프로그램을 사용하는 방법에 대한 정보

추가 정보

이 문서의 "해결 방법" 절에 제공된 방법 중 하나를 사용하여 MODI를 설치할 수 없는 경우 Microsoft Office Document Imaging에 제공된 일부 기능을 다시 얻는 데 사용할 수 있는 몇 가지 대체 방법이 있습니다.

Microsoft Office Document Scanning

MODI의 Microsoft Office Document Scanning 구성 요소는 설치된 스캐너를 사용하여 문서를 스캔하고 컴퓨터에서 해당 문서를 사용할 수 있게 하는 데 사용됩니다. 문서를 스캔하려면 Windows 팩스 및 스캔 서비스를 사용하십시오. Windows 팩스 및 스캔 서비스에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오. 참고 타사 스캔 소프트웨어 또는 스캔 장치나 인쇄 장치에 포함된 스캔 소프트웨어를 사용하는 경우 장치 제조업체에 자세한 정보를 문의해야 합니다.

Microsoft Office Document Image Writer 인쇄 드라이버

MODI에는 Microsoft Office Document Image Writer 인쇄 드라이버가 포함되어 있습니다. 이 드라이버를 사용하여 Microsoft Office 문서를 .tiff 형식이나 .mdi 형식으로 저장할 수 있습니다. Microsoft XPS Document Writer 프린터 드라이버나 Windows 팩스 프린터 드라이버를 사용하는 것이 좋습니다. Microsoft XPS Document Writer에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.

.tiff 파일 또는 .mdi 파일 보기

.tiff 파일을 보려는 경우 다음 응용 프로그램 중 하나를 사용하십시오.
  • Windows XP: Windows Picture 및 Fax Viewer
  • Windows Vista 이상 버전: Windows Photo Viewer 또는 Windows 사진 갤러리
현재 Microsoft to Office 2010에서 .mdi 파일을 볼 수 있도록 Microsoft에서 제공하는 뷰어는 없습니다. .mdi 파일을 열려면 타사 변환기를 사용하거나 해당 파일을 .tiff 형식으로 변환한 후 Office 2003 또는 2007 Office System의 MODI에서 볼 수 있습니다.

광학 문자 인식

MODI에서는 OCR(광학 문자 인식)을 수행할 수도 있습니다. OCR을 수행하여 스캔한 이미지나 팩스의 텍스트를 다른 위치로 복사할 수 있습니다. 이 기능을 구현하려면 Microsoft OneNote 2010을 사용하십시오. 이렇게 하려면 다음과 같이 하십시오.
  1. OneNote 2010의 삽입 탭에서 그림을 클릭합니다.
  2. 스캔한 파일을 찾아 엽니다. 파일이 OneNote 2010에 그림으로 삽입됩니다.
  3. 그림을 마우스 오른쪽 단추로 클릭하고 그림에서 텍스트 복사를 클릭한 후 해당 정보를 다른 위치로 붙여 넣습니다.
OneNote 2010에서는 XPS Document Writer 프린터 드라이버를 사용하여 OneNote로 인쇄합니다.

iFilter

Microsoft 다운로드 센터에서 다음 파일을 다운로드할 수 있습니다.
다운로드 지금 Windows TIFF IFilter Installation and Operations Guide.doc 패키지를 다운로드하십시오.

Microsoft 지원 파일을 다운로드하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
119591 온라인 서비스로부터 Microsoft 지원 파일을 구하는 방법
Microsoft는 파일을 게시한 날짜에 사용할 수 있는 최신 바이러스 예방 프로그램으로 이 파일을 검사했습니다. 이 파일은 무단으로 변경할 수 없는 보안이 향상된 서버에 보관됩니다.

Live Meeting

이전에 Microsoft Live Meeting은 MODI를 사용해서 Microsoft Word 문서를 모임에 업로드했습니다. 이제 Live Meeting은 MODI 프린터 드라이버를 설치합니다. 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.

940842 Windows 기반 Live Meeting 2007 클라이언트를 설치한 후에 문서를 모임으로 가져올 수 없음

 

using CDO 을 사용하려면

참조 추가에서 COM -> Microsoft CDO for Windows 2000 Library 를 선택하면 된다.

 

+ Recent posts

티스토리 툴바