Phone'N Use database enables NGOs and governments to find and register unregistered children who are living in poor remote areas. Mobile Registration Units operated by NGOs can use Phone'N Use application to register anyone. There are approximately 23 million children who are not registered in in South Asia and 20 million in Africa who are vulnerable to exploitation and abuse.

Please vote us: http://www.msstudentlounge.com/studentrally/tabid/81/Default.aspx - Team WeRain, Korea

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License

'남정현' 카테고리의 다른 글

Welcome to WeRain Phone'N Use Information Page  (0) 2010/06/14
Posted by Windows Azure MVP 남정현 (rkttu.com)

작년에 이어, 올해에도 2010 Microsoft MVP로 Visual C# 부문에 선정되었습니다. 올해도 새해에 뜻깊은 선물을 다시한번 받게 되어 매우 기쁘게 생각하며, 더욱 열심히 활동하는 한 해가 되도록 하겠습니다.

 

MVP 프로필: https://mvp.support.microsoft.com/profile/Jeong Hyun.Nam

 

2010년 경인년에는 뜻하는 바 모두 이루어지시기를 바라며, 새해 복 많이 받으십시오. 블로그에 방문해주시는 모든 분들께 감사드립니다. :-)

 

2010년 1월 18일 // 인증샷

 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

2009 Microsoft Most Valueable Professional - Visual C# 분야에 선정되었습니다. 새해 첫날 수상하게 되어 기쁨이 더 큽니다. 앞으로도 데브피아 커뮤니티, 블로그, 세미나 등을 통하여 좀 더 많은 분들과 소통하며 상생할 수 있는 계기를 마련할 수 있도록 최선을 다하겠습니다.

프로필 디렉터리: https://mvp.support.microsoft.com/profile=071B28EE-D543-4B8D-9434-9AB51A9DD8E1

감사합니다. :-)

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

한국어 글자를 초성, 중성, 종성으로 나누거나 이를 다시 합할 수 있도록 하는 유틸리티 클래스를 인터넷 검색 중에 발견하여 Java 버전을 C# 버전으로 만들어보았습니다. (원래의 설계에서 최적화하거나 변경한 부분이 좀 있습니다.)

출처: http://okjsp.pe.kr/seq/26355

사용 예시:

using System;

namespace rkttu.Unicorea
{
    class Program
    {
        static void Main(string[] args)
        {
            char a, b, c, d;
            HangulAnalyzer.Split('간', out a, out b, out c);
            Console.WriteLine(
                "{0}, {1}, {2}",
                a, b, c);

            HangulAnalyzer.Merge(a, b, out d);
            Console.WriteLine(d.ToString());

            int x, y, z;
            HangulAnalyzer.Split('하', out x, out y, out z);
            Console.WriteLine(
                "{0}, {1}, {2}",
                HangulAnalyzer.First[x],
                HangulAnalyzer.Middle[y],
                HangulAnalyzer.Last[z]);

            HangulAnalyzer.Merge(x, y, out d);
            Console.WriteLine(d.ToString());

            Console.ReadLine();
        }
    }
}

invalid-file

다운로드하기


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

지난번 겨울에 있었던 매쉬업 경진대회에 이어서 Daum Open API 관련 행사에는 두 번째로 참가하게 되었습니다. Open API를 이용한 웹 개발과 ASP.NET에서의 연동에 개인적으로 관심을 많이 두고 있었지만, Open API의 또 다른 활용 가능성을 살펴보고 싶었습니다. 무엇보다도 평소에 만나기 힘들었던 분들과 함께할 수 있었던 것은 참 좋았습니다. 특히, 길버라이트님을 뵐 수 있어서 무척 반가웠습니다. :-)

지난 겨울에 문방사우를 만들면서 남겨놓은 CLIFX OpenAPI Library를 업데이트한 것을 바탕으로 Inplace 프로젝트를 약 9시간 정도에 걸쳐서 완성했습니다. 부족한 부분도 있었지만 Open API를 통해서 만들어보고 싶었던, 간단하지만, 실용적인 웹 서비스를 데모로 보일 수 있었습니다.

사용자 삽입 이미지
 
사용자 삽입 이미지

검색 결과

로고는 같이 프로젝트에 참여했던 기혁 선배의 작품입니다. -_-v

국내 대부분의 Open API 서비스가 검색 결과를 RSS 컨테이너 기반으로 제공하고 있었기 때문에 일관성있게 프로바이더들을 묶고 검색 결과를 표시할 수 있었습니다.

검색 결과 제일 하단에는 Internet Explorer를 위한 즐겨찾기 일괄 내보내기와 HTML 내보내기 기능을 실행할 수 있는 버튼을 두었습니다.

사용자 삽입 이미지

IE 즐겨찾기 내려받기 결과

사용자 삽입 이미지

HTML 내보내기 결과

 

여러모로 재미있었던 시간이었습니다. 차기 행사때는 더 재미있는 일들이 많을것 같습니다. 벌써부터 기대되네요. :-)


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

처음으로 텍스트 큐브용 플러그인을 제작해보았습니다. OpenSearch 기능을 추가하기 위하여 플러그인을 만들어본 것으로 플러그인을 활성화하면 자동으로 지정된 옵션에 따라서 OpenSearch XML에 관한 정보를 출력물의 HEAD 태그에 추가합니다.

사실 OpenSearch를 완벽하게 블로그에 통합하기 위해서는 Textcube를 직접 Modify해야 하는 일이 필요하지만 개인적인 의향에 맞출 목적으로 제작한 플러그인임을 양지해주셨으면 합니다. OpenSearch XML 명세는 직접 지정해주셔야 합니다.

OpenSearch XML 명세의 예제: http://rkttu.com/search.xml
XML 명세 자동 작성 도구 1: http://www.microsoft.com/windows/ie/searchguide/ko-kr/default.mspx
XML 명세 자동 작성 도구 2: http://www.enhanceie.com/IE/SearchBuilder.asp


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

IDataReader 인터페이스는 Database Command 객체로부터 데이터 결과 집합을 반환받을 때 주로 사용하는 ExecuteReader 함수의 결과 객체이다. 하지만 이 객체는 "커서"의 개념을 사용하고 있어서 디버거에서 사용하기가 매우 불편하다. 내용을 한꺼번에 살펴볼 수 있는 방법이 없어서 디버거나 NUnit에서 불편했던 적이 많다. 이런 점을 해결하기 위해서 개인적으로 IDataReader 뷰어 폼을 만들어보았다. 참고로 이것은 Windows Forms를 위한 것이다.

public partial class DataReaderViewer : Form
    {
        public DataReaderViewer()
            : this(null)
        {
        }

        public DataReaderViewer(IDataReader oReader)
        {
            this.m_oReader = oReader;
            this.InitializeComponent();
        }

        private IDataReader m_oReader;

        private void DataReaderViewer_Load(object sender, EventArgs e)
        {
            this.RefreshDataView();
        }

        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public IDataReader Reader
        {
            get { return this.m_oReader; }
            set
            {
                this.m_oReader = value;
                this.RefreshDataView();
            }
        }

        public bool RefreshDataView()
        {
            if (this.m_oReader != null && !this.m_oReader.IsClosed)
            {
                DataTable oTable = new DataTable();
                oTable.Load(this.m_oReader);
                this.oViewer.DataSource = oTable;
                return true;
            }

            return false;
        }

        public static DialogResult ShowViewer(IDataReader oReader)
        {
            return (new DataReaderViewer(oReader)).ShowDialog();
        }
    }

위의 코드에서 oViewer라고 하는 이름의 컨트롤을 추가하여 디자인하는 것은 실제로 적용할 때의 몫이 되겠다. 하지만 개략적인 원리는 간단하며, 디버거에서 사용하기 편리하게 하기 위하여 ShowViewer라고 하는 정적 함수를 두었다. 또한, 필요하다면 네임스페이스를 따로 두지는 말자. 직접 실행창이나 디버거에서 네임스페이스를 인식할 수 업는 상황도 자주 오기 때문이다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

병역특례 지원을 위하여 백방으로 노력하던 때 만들었던 웹 사이트이다. AJAX 연습을 위해서 만들어보았고 내가 원하는대로 괜찮게 만들어진 사이트인 것 같다. (물론 나는 디자이너가 아니므로 디자인 감각은 꽝이다.) 지금 생각해보면 힘들었지만 나의 경력이 아직도 한참 모자란다는 것을 알게 해준 시절인것 같아서 굉장히 소중하다.

http://rkttu.com/portfolio/index.html

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

글을 이동하였습니다.

http://www.rkttu.com/notice/337 

 

크리에이티브 커먼즈 라이선스
Creative Commons License

'남정현 > 개인 이력' 카테고리의 다른 글

운영자 프로필  (2) 2006/12/02
Posted by Windows Azure MVP 남정현 (rkttu.com)

ASP .NET을 기반으로 회원제 사이트를 구축하려고 할 때 제대로된 주민등록번호 검색 알고리즘을 제공하는 곳이 많이 없는듯 보입니다. 미약하지만 요즈음 근황에 맞게 설계된 새로운 버전의 코드를 이곳에 올립니다. 많은 도움이 되시길 바랍니다.

/// <summary>
/// 대한민국의 주민등록번호 식별 체계에 의하여 제공된 주민등록번호가 올바른 주민등록번호인지의 여부를 판별합니다.
/// </summary>
/// <remarks>
/// 이 메서드는 20세기, 21세기 출생자에 한해서 주민등록번호 유효성 검사를 지원합니다.
/// 20세기보다 이전의 출생자의 주민등록번호, 21세기보다 이후의 출생자의 주민등록번호들은
/// 검사 결과가 모두 False로 출력됩니다.
/// </remarks>
/// <param name="firstPart">주민등록번호를 구성하는 앞의 6자리 숫자입니다. 연, 월, 일 순서로 각각 두 자리로 구성된 앞의 6자리입니다.</param>
/// <param name="lastPart">주민등록번호를 구성하는 뒷쪽의 7자리 숫자입니다. 고유 번호 7자리로 구성되어있습니다.</param>
/// <returns>형식에 맞는 주민등록번호이면 True, 맞지 않다면 False를 반환합니다.</returns>
public static bool CheckSocialNumber(string firstPart, string lastPart)
{
  string socialNo = firstPart.Trim() + lastPart.Trim();

  // 정규식 패턴 문자열입니다. 6자리의 정수 + [1, 2, 3, 4 중 택 1] + 6자리의 정수
  string pattern = @"\d{6}[1234]\d{6}";

  // 입력 내역과 정규식 패턴이 일치하면 이 조건문을 통과합니다.
  if(!Regex.Match(socialNo, pattern, RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace).Success)
       return false;

  // 20세기 출생자와 21세기 출생자를 구분합니다.
  string birthYear = ('2' >= socialNo[6]) ? "19" : "20";

  // 연도 두 자리를 추출하여 추가합니다.
  birthYear += socialNo.Substring(0, 2);

  // 월 단위 두 자리를 추출합니다.
  string birthMonth = socialNo.Substring(2, 2);

  // 일 단위 두 자리를 추출합니다.
  string birthDate = socialNo.Substring(4, 2);

  try
  {
       // 정수로 변환을 시도합니다. 예외가 생기면 catch 블럭으로 이동됩니다.
       int bYear = int.Parse(birthYear);
       int bMonth = int.Parse(birthMonth);
       int bDate = int.Parse(birthDate);

      // 20세기보다 이전연도, 21세기보다 이후연도,
       // 월 표기 수가 1보다 작은 값, 월 표기 수가 12보다 큰 값,
       // 일 표기 수가 1보다 작은 값, 일 표기 수가 12보다 큰 값에 해당되면
       // catch 블럭으로 이동됩니다.
       if(bYear < 1900 || bYear > 2100 || bMonth < 1 || bMonth > 12 || bDate < 1 || bDate > 31)
           throw new Exception("잘못된 날짜 표현입니다.");
  }
  catch { return false; }

  // 고유 알고리즘입니다.
  int[] buffer = new int [13];

  for(int i=0; i<buffer.Length; i++)
       buffer[i] = Int32.Parse(socialNo[i].ToString());

  int summary = 0;
  int[] multipliers = new int [] { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };

  for(int i=0; i<12; i++)
       summary += (buffer[i] *= multipliers[i]);

  return !((11 - (summary % 11)) % 10 != buffer[12]);
}
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)