2016년 12월 11일 일요일

블로그 이전.

2015년 7월 23일 목요일

좋은 글



그대가 서 있는 곳에서,
그대가 가진 것으로,
그대가 할 수 있는
최선의 일을 하라.
-루즈벨트

2015년 7월 16일 목요일

Visual Studio Extensions_Code Maid

Explain.
Visual Sutdio Extensions 프로그램중
Code Maid에 대해 정리.
Join Line, Sort Line ,Code CleanUp, Code space 등의 기능 제공.
설치방법 및 대표적인 기능 정리 예정...

Visual Studio_Hot key


Explain.
Visual Studio Hot key list
자주쓰는 내용 Bold


Rename : Ctrl + R, R
Extract Method : Ctrl + R , M
Extract Interface : Ctrl + R, I

Quick Resolve : Ctrl + .
Navigator : Ctrl + ,
Find All Reference : Shift + F12
Class View : Ctrl + Shift + C
Auto Document : Ctrl + K + D

Comment Selection : Ctrl + K + C
UnComment Selection : Ctrl + K + U

Go to : Ctrl + G

2015년 6월 21일 일요일

C#_Naver Search API 활용 소스


AnalysisEngine.
class AnalysisEngine
{
    public enum Step
    {
        WEB,
        IN,
        CAFE,
        BLOG
    }

    const string NAVER_OPENAPI_KEY = "InputYourNaverAPIKey";
    const string NAVER_OPENAPI_URL = "http://openapi.naver.com/search?";
    const int NAVER_SEARCH_COUNT = 100;

    string keyword;
    string url;
    string blog;
    string cafe;

    public AnalysisEngine(string keyword, string url, string blog, string cafe)
    {
        this.keyword = keyword;
        this.url = url;
        this.blog = blog;
        this.cafe = cafe;
    }

    public void Analysis()
    {
        AnalysisResult result = new AnalysisResult();
        

        result.webRank = AnalysisProccess(Step.WEB, url);
        result.blogRank = AnalysisProccess(Step.BLOG, blog);
        result.cafeRank = AnalysisProccess(Step.CAFE, cafe);

        Console.WriteLine("0 = 100위안에 없음.");
        Console.WriteLine("네이버 웹문서 분석 결과 : " + result.webRank);
        Console.WriteLine("네이버 블로그 분석 결과 : " + result.blogRank);
        Console.WriteLine("네이버 카페 분석 결과 : " + result.cafeRank);

        Console.ReadLine();
    }

    int AnalysisProccess(Step step, string target)
    {
        string html = AnalysisTools.GetHTML(CreateURL(step));

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(html);

        int rank = 0;

        foreach (XmlNode node in doc.SelectNodes("rss/channel/item/link"))
        {
            string realURL = GetRealURL(node.InnerText);

            if (realURL.Length > target.Length)
                realURL = realURL.Substring(0, target.Length);

            Console.WriteLine(realURL);

            ++rank;
            if (target == realURL)
            {
                return rank;
            }
        }

        return 0;
    }

    string CreateURL(Step step)
    {
        string target = "";
        switch (step)
        {
            case Step.WEB: target = "webkr";
                break;
            case Step.IN: target = "in";
                break;
            case Step.CAFE: target = "cafearticle";
                break;
            case Step.BLOG: target = "blog";
                break;
            default:
                break;
        }

        return string.Format("{0}key={1}&query={2}&display={4}&start=1&target={3}", NAVER_OPENAPI_URL, NAVER_OPENAPI_KEY, keyword, target, NAVER_SEARCH_COUNT);

    }

    /*
    Naver API를 활용하여 url주소를 획득 할 시
    실주소가 아닌 API 로 맵핑된 가상주소를 제공 해주기 때문에
    직접 리다이렉트 주소를 획득하여 반영 하기위한 함수.
    */

    string GetRealURL(string url) 
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
        webRequest.AllowAutoRedirect = false;

        webRequest.Timeout = 10000;           
        webRequest.Method = "HEAD";

        HttpWebResponse webResponse;
        string uriString = string.Empty;

        using (webResponse = (HttpWebResponse)webRequest.GetResponse())
        {
            if ((int)webResponse.StatusCode >= 300 && (int)webResponse.StatusCode <= 399)
            {
                uriString = webResponse.Headers["Location"];
                webResponse.Close();
            }
        }

        return uriString;
    }
}

AnalysisResult
class AnalysisResult
{
    public int webRank;
    public int cafeRank;
    public int blogRank;
}

AnalysisTool
class AnalysisTools
{
    public static string GetHTML(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if (response.StatusCode == HttpStatusCode.OK)
        {
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = null;

            if (response.CharacterSet == null)
            {
                readStream = new StreamReader(receiveStream);
            }
            else
            {
                readStream = new StreamReader(receiveStream, Encoding.UTF8);
            }

            string data = readStream.ReadToEnd();

            response.Close();
            readStream.Close();

            return data;
        }

        return string.Empty;
    }
    
}

Main
class Program
{
    static string keyword = ""; //키워드
    static string homepage = ""; //홈페이지 주소
    static string blog = ""; //블로그 주소
    static string cafe = ""; //카페 주소


    static void Main(string[] args)
    {

        AnalysisEngine engine = new AnalysisEngine(
            keyword , 
            homepage, 
            blog,
            cafe);

        engine.Analysis();

        
    }
}

2015년 6월 2일 화요일

Unity_코루틴 함수를 활용한 Lerp함수 활용 using IEnumerator with Lerp

Explain.

Unity Coroutine 함수를 활용한 Object의 Lerp(선형보간)운동 구현구현
가장 심플하게 구현한 예제.
C#의 Generic , Reflection을 활용하여 기능 확장 가능.

Code.
IEnumerator moveCoroutine(float duration, Vector3 end)
{
 WaitEndOfFrame wait = new WaitEndOfFrame();

 Vector3 start = transform.position;
 float elapsed = 0.0f;

 while(elapsed < duration){
  elapsed += Time.deltatime;
  transform.position = Vector3.Lerp(start,end elapsed / duration);
  yield return wait;
 }

 transform.position = end;
}

IEnumerator colorCoroutine(float duration, Color start, Color end)
{
 WaitEndOfFrame wait += new WaitEndOfFrame();

 float elapsed = 0.0f;

 while(elapsed < duration){
  elapsed = Time.deltaTime;
  renderer.material.color  = Color.Lerp(start,end elapsed / duration);
  yield return wait;
 }

 renderer.material.color = end;
}

2015년 5월 14일 목요일

Game Open Source_3-Match Puzzle 형식의 게임 소스



예전에 만들어둔 3-Match형식(애니팡) 소스를 Github에 올려둔게 있어서 포스팅.


References.
Github.
PlayStore.