11/09/2009

App.config 읽고 쓰기

configuration file에 키로 값을 설정해 놓고
필요할 때마다 불러서 쓰면 *.exe.config 설정값만 변경함으로써
프로그램을 좀 더 쉽게 관리할 수 있다.

예전에 COM port 통신 프로그램을 만들면서 포트와 관련된 설정값들을
Configuration 파일을 통해 관리함으로써 따로 디버그 필요없이 *.exe.config 파일만 변경해 사용했다.

app.config 파일을 추가하고 아래의 코드와 같이 <appsettings> 요소에 <add> 요소를 집어넣은 후
메인 소스 코드에서 간단하게 불러오거나 (AppSettingsReader)
읽어오고 쓰는 방법(Configuration)을 알아보자


*.exe.config 파일
<configuration>
  <appsettings>
    <add key="appConStr" value="server-localhost;uid='sa';pwd='';database=Cars"/>
    <add key="timesToSayHello" value="8"/>
  </appsettings>
</configuration>


*.cs 파일
using System;
using System.Configuration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //방법 1
            AppSettingsReader ar = new AppSettingsReader();
            
            //key를 가지고 설정된 value값을 가져온다.
            string str = (string)ar.GetValue("appConStr", typeof(string));
            int numbOfTimes = (int)ar.GetValue("timesToSayHello", typeof(int));

            //방법 2[읽고 쓰기] 
            //before using this code, Add System.Configuration reference
            System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            //쓰기
            config.AppSettings.Settings["appConStr"].Value = "3";

            //읽기
            string value = ConfigurationManager.AppSettings["appConStr"];

            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }
    }
}


주의할점-
프로그램 개발시 디버그 모드(F5)에는 프로젝트의 Root 폴더에 있는 App.config 파일을 debug/bin 폴더로 복사해 사용한다.

디버그 모드에서 아무리 debug/bin 의 app.config 파일을 고치고 삽질을 해도 다음 디버그 모드때에는 root 폴더의 app.config 파일이 덮어씌우므로 변하지 않는것 처럼 보이는 것이다. Bin 폴더에서 직접 exe를 실행시켜 config 파일을 바꾸어 보면 다음에 프로그램을 실행시켜도 변경한 내용이 적용되어 있는걸 확인할 수 있다.

나처럼 안바뀐다고 성질부리지 말자 -_ㅠ

참조할 dll 파일 위치지정


그림과 같이 App.Config를 추가해 아래와 같은 코드를 넣어놓으면
실행파일이 있는 폴더의 하위 폴더인 MyLibraries 폴더나 MyLibraries/Tests 폴더 아무곳이나 참조하는 Dll파일이 있으면 프로그램이 실행된다.


실행파일과 함께있는 산만한 Dll파일들을 정리해보자.


주위할 점은 privatePath 속성에 세미콜론(;)으로 여러 폴더를 지정해 줄 때
세미콜론 뒤에 공백을 두면 안되는 것과 하위폴더는 \ 로 나타내자.



<configuration>
  <runtime>
    <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatepath="MyLibraries;MyLibraries\Tests"/>
  </assemblybinding>
</runtime>
</configuration>

p.s: 흠.. SyntaxHighlighter Xml쪽은 좀 이상하게 나오는군.
그래서 Windows Live Writer로 갈아탔음 -_-+

11/08/2009

Coney Island

2009/11/7

뉴욕에 있는 Coney Island를 찾았다.

Heykoreand에서 가입한 디카 클럽에서 벙개를 해서 같이 따라갔는데
춥긴했지만 많은 사진도 찍고 배우는 그런 자리였다.


크게 보기

먼저 Coney Island는 맨하튼에서 지하철로 갈 수 있다.

coney island station

32가에서 지하철 탄지 50분정도 걸려 도착한 Coney Island

empty subway

종점이다 보니까 텅빈 지하철을 찍을 수 있었다.

stationstation

뉴욕안에서는 지하철이 항상 지하로만 다닐 줄 알았는데 한국처럼
위로도 나오는구나 ~_~

coney islandconey island

열심히 찍은 사진들!! 질 수 없다!!

coney island

코니아일랜드는 바다 근처에 있는 유원지라 도착해서 탁 트인 바다를 봤을 때
”WOW”를 연발했다 +ㅁ+ 누군가도 나와같은 생각으로 저리 써놨으리라

coney island

 

coney island

겨울이 다가오고 있어 그런지 물은 나오지 않았다.

coney islandconey island

멋진 풍경이 있으니 나름 분위기 있는 사진들이 나온듯 +ㅁ+

coney islandconey island

낙시를 하는 사람도 있더라 ~_~

coney island

오늘 디카 클럽에서 Coney Island에 온 목적은 바닷가 노을을 찍는 것이다.
미국은 섬머타임이 있어 오늘은 5시 45분정도에 해가 졌다.

coney island
요 할머니가 낙시하시는 분. 많이 잡으셨으려나.

coney island

내가 느끼는 뉴욕의 장점은 자연과 공존한다는 것이다.
분주한 도심속에 수도없이 분포되어있는 공원하며
지하철로 30~40분만 타고 오면 멋진 바닷가를 볼 수 있는 것 하며,
한국에서 이런 여유로움을 느끼기에는 부족한 면이 있다.
(물론 내가 게을러서이겠지만 –_ㅠ)

coney island

sunset at coney island

드디어 해가 지기 시작했다. 언제봐도 노을은 멋있구나 :)
멋진 사진을 찍기위해 돌아다니는 열정들. 그게 부럽고 멋있다.

coney island station

미국 뉴욕의 할로윈(Halloween) 축제

매년 10월 31일은 할로윈 축제이다.

할로윈에 관한 정보는 아래 사이트를 참조
영문 (http://en.wikipedia.org/wiki/Halloween)
한글 (http://ko.wikipedia.org/wiki/%ED%95%A0%EB%A1%9C%EC%9C%88)

 

매년 열리는 할로윈 퍼레이드(http://halloween-nyc.com/)를 보기 위해서
행사시작시간(7시)보다 일찍 맨하튼으로 나갔다.

clip_image002[4]

나가자 마자 마주친 쇼킹한 복장 ㅎㅅㅎ

clip_image004[4]

강아지마저 코스튬을 하고 있었다. 앙 깨물어버릴라!ㅎ

 

5시쯤 6Av에 도착했는데도 사람들이 꽤 많았다.
다행이 맨 앞줄에 설 수 있는 기회를 가졌다 –_-v

 

퍼레이드 시작을 알리는 경찰의 행진.

금일 퍼레이드는 중간에 너무 비가 많이와서 –_ㅠ
한시간 정도 관람하다가 허기를 때우러 식당을 찾았다.

clip_image002clip_image004clip_image006clip_image008clip_image010clip_image012clip_image014clip_image016clip_image018clip_image020clip_image022clip_image024clip_image026clip_image028clip_image030clip_image032clip_image034clip_image036clip_image038clip_image040clip_image042clip_image044clip_image046

 

 

퍼레이드 구경을 마치고 찾은 Spain 음식점.

퍼레이드로 인해 6Av가 막혀있어 옆으로 넘어갈 수가 없었다.
게다가 사람도 너무 많고 지하철도 경찰이 막고있고 비는 오고
솔직히 너무 힘들어 아무곳이나 찾아간 곳이 바로 이곳.

맛은....최악이었다 –_-^

보이는 건 그럴듯하지만 닭가슴살요리는 소스가 너무 셨고
해물찜같이 보이는건 너무 퍽퍽했다. –_ㅠ

아.. 다음엔 좋은곳을!!

clip_image048

11/06/2009

Custom Exception in C#

예외를 직접 만들어 써보자.


//custom exception
[Serializable]
public class CarIsDeadException : ApplicationException
{
    public CarIsDeadException() { }
    public CarIsDeadException(string message)
        : base(message) { }

    //to handle "inner exceptions"
    public CarIsDeadException(string message, System.Exception inner)
        : base(message, inner) { }

    //to handle the serialization of type.
    protected CarIsDeadException(
        System.Runtime.Serialization.SerializationInfo info,
        System.Runtime.Serialization.StreamingContext context)
        : base(info, context) { }
}

//using
public class Main
{
    public Main()
    {
        //using basic
        try
        {
            CarIsDeadException ex = new CarIsDeadException("error");
            throw ex;
        }
        catch(CarIsDeadException e)
        {
            string errorMessage = e.Message;
            System.Windows.Forms.MessageBox.Show(errorMessage);
            //using inner exception
            try
            { ... }
            catch (Exception e2)
            {
                throw new CarIsDeadException(e.Message, e2);
            }
        }
    }
}

11/05/2009

OOP 3 traits [Encapsulation, Inheritance, Polymorphism]

Encapsulation
1. object 사용자로부터 그안에 구현된 세부사항을 숨기는 것.
2. object를 캡슐화함으로써 data 보호 역할. (private keyword)
3. object 사용자는 손쉽게 object를 이용할 수 있다. (함수 호출 등)
-- get&set property, method invoke --

Inheritance
1. 새 class를 기존의 class를 기반으로 만드는 것, 코드의 재사용성 증가
2. classical inheritance("is-a" relationship)
3. containment/delegation inheritance("has-a" relationship)

Polymorphism
1. 관련된 객체들을 동일한 방식으로 다룰 수 있도록 하는 것.
2.정수의 덧셈, 부동소수점 수의 덧셈, 문자열의 덧셈 등 모두를 "더하라"는 같은 방식으로 다룰 수 있도록 하자는 것.
-- abstract, virtual ,,, override, new --

System.Enum 중요 메소드

enum Colors : int // byte, sbyte, short, ushort, int, uint, long, ulong
{
    Red, Green, Blue, Yellow 
};
enum Styles { Plaid, Striped, Tartan, Corduroy };

public void method()
{
    Colors myColor = Colors.Blue;

    string str1 = String.Format("My favorite color is {0}", myColor);   //Blue
    string str2 = String.Format("The value of my favorite color is {0}", Enum.Format(typeof(Colors), myColor, "d"));    //2
    string str3 = String.Format("The hex value of my favorite color is {0}", Enum.Format(typeof(Colors), myColor, "x"));    //00000002
    string str4 = String.Format("The 4th value of the Colors Enum is {0}", Enum.GetName(typeof(Colors), 3));    //Yellow
    string str5 = String.Format("The 4th value of the Styles Enum is {0}", Enum.GetName(typeof(Styles), 3));    //Corduroy
    string[] str6 = Enum.GetNames(typeof(Colors));  //Red, Green, Blue, Yellow 
    Array str7 = Enum.GetValues(typeof(Colors));    //Colors.Red, Colors.Green, Colors.Blue, Colors.Yellow 
}

Enum Type 중요 메소드들

const, readonly, static keyword in C#

const keyword
암시적으로 static
컴파일 타임에 선언과 동시에 초기화, 값 못바꿈
readonly keyword
다른 class 에서 쓰고 싶으면 명시적으로 static
런타임에 한번 결정되면 바꾸지 못함.

class Tire
{
    public const Tire GoodStone = new Tire(90); //Error!
    public readonly static Tire GoodStone = new Tire(90);

    public int manufactureID;
    public Tire() { }
    public Tire(int ID)
    {
        manufactureID = ID;
    }
}

static keyword
static 메소드에서 쓰이는 외부 멤버들은 모두 static으로 선언되어 있어야 함
class내에 선언된 static 변수는 class instance생성시 같은 메모리를 공유한다.
static class는 instance를 만들 수 없다.

11/01/2009

미국에서 중고차 구매

미국 NJ 에서 운전면허 따기 3탄, 중고차 구매하기
  1. 한국 운전면허증 공증받기
  2. 뉴저지 면허증 따기
  3. 중고차 구매하기
미국에 들어온지 3달. 드디어 중고차를 구매했다.
2002년도 Toyota camry로 앞으로 9달간 내 발이 되어줄 녀석이다.
clip_image002[7]clip_image004[4]clip_image006[4]clip_image008[4]clip_image010[4]

개인에게 중고차를 구매할 때 단계는 아래와 같다.


1. 자신에게 맞는 중고차 찾아보기
http://www.heykorean.com 한인장터로 NJ, NY 차량이 많다.
http://www.koreadaily.com 역시 한인장터로 CA 차량이 많다.
http://www.craigslist.org 미국 장터로 주를 고르고
for sale란에서 cars+trucks링크를 누르면 찾을 수 있다. 딜러별 개인별로
검색가능하다.


2. 찾은 중고차 가격을 알아보자
http://www.kbb.com private party value로 년도별, 차종별 가격을 알아본다.
흥정시에 여기에 있는 private party value가 중고차 거래시 기본이 되며 나같은 경우는 fair 와 good condition 사이의 가격에서 협의해 차량을 구매했다.


3. 중고차를 직접 보자. 주의사항을 체크하자.
http://www.suksuk.co.kr/momboard/read.php?table=BEB_010&number=7&page=1
http://www.easygoing.co.kr/life/life083.html
http://usedcarinspections.org/
10만 마일이 넘은 차종들은 타이밍밸트, 워터펌프 등 돈이 많이 들어가는 소모품에 대해 교체가 언제쯤 이루어졌는지 확인하는 것이 좋다.


4. VIN NUMBER 확인 (carfax 확인)
차량이 마음에 들고 살 의향이 있다면 카팩스 확인을 위하여 VIN 넘버(차량 고유번호)를 받는다.
http://www.carfax.com/ 에서 VIN넘버를 집어넣고 사고유무등을 확인한다.
여기서 carfax 조회시 돈이 든다.
carfax 무료 조회 - http://www.koreadaily.com/
무료로 보는법은 위 사이트에서 한인장터 중고란에 “빈보이”님께
vin number 조회를 부탁하면 2~3일내로 답변이 달린다.


5. 차량구매
차량이 마음에 든다면 이제 계약을 하고 구매를 한다.
그전에 자동차 보험에 들어 Policy Number를 받아야 한다.
나같은 경우는 유학생이라 credit이 없어 6개월에 $650정도 냈다.

보통 구매자 판매자가 같이 DMV에 가서 차량등록(구매자)와 번호판말소(판매자)를
하는 것이 가장 좋다. 서류상의 문제등이 발생할지 모르므로 같이가는게 좋다.


준비물 : 판매자의 차량등록증(Certificate of title), 구매자의 보험 Policy 번호, 구매자의 운전면허증, 세금낼 돈

나같은 경우는 판매자의 차량등록증(Certificate of title) 뒷편의 LienHolder란에 써 놓았다가 판매자가 수정양식등을 쓰는 헛고생을 하였다.

개인한테 자동차를 사는 경우에는 구매액을 직접 써서 세금을 내야하는데
보통 거래액보다 낮게 쓰거나 gift 처리로 세금을 절약하는게 일반적이다.
판매자와 협의해 자동차 등록증 뒷편에 판매가격을 쓸 때 낮게 써달라고 하자.

특히 적정 시세보다 저렴하게 차량을 구매했다면 나중에 NJ Tax 관련 부서로부터
세금을 더 내라고 날라오므로 체크 영수증이나 개인 영수증으로 받아놓는것이 좋다.

세금(구매액의 7%)과 자동차 등록증 발급비를 내면
자동차 등록증(Certificate of title)과 번호판, Inspection Notice를 받을 수 있다.

이제 구매한 자동차에 내 번호판을 달고 마음껏 달리면 된다.
단, 주의할 점은 자동차 등록증은 차안에 놓지 말길 바란다.
차량 도난시 자동차 등록증을 가지고 제 3자가 마음대로 판매할 수도 있기 때문이다.


6. 차량 검사(inspection)
차량등록시 같이 받은 Inspection Notice종이를 가지고 DMV에 붙어있는 inspection 장소에 가면 무료로 Inspection을 받을 수 있다. 중고차의 경우 14일 이내에 Inspection을 받아야 한다.
나같은 경우에는 같은 NJ차량을 구매해서 아직 Inspection expire 기간이 남아있어 생략!.