GSI

사용자 삽입 이미지

본 프로그램은 위의 그림의 Grid 객체가 중앙을 기준으로 회전하는 에니메이션 예제 입니다.
Start Angle, End Angle의 값을 변경해서 시작과 끝의 각도를 정해줄 수 있습니다.
Start, End의 회전각도를 정하고 Start 버튼을 누르면 원하는 각도만큼 회전할 수 있습니다.

본 예제는 Animation을 진행할 때 Value의 객체를 cs 파일에서 접근해서 처리 하기가 힘든 기존의 부분을 처리 하기 쉽도록 테스트를 해본 겁니다. ^^ (개인적으로 힘들었어요)

[코드 설명]
Animation의 SplineDoubleKeyFrame에 들어 가는 Value의 값을 바꾸기 위해서
처리용 클래스를 하나 제작했습니다.

    public class AniControl
    {
        private int start;
        private int end;

        public int Start
        {
            set { start = value; }
            get { return start; }
        }

        public int End
        {
            set { end = value; }
            get { return end; }
        }
    }

이제 연동을 위해서 xaml 코드에 추가작업을 했습니다.

xmlns:src="clr-namespace:CircleRotate" <-- 네임스페이스를 <Window.. 여기에 추가했습니다.

Window.Resources 내부에 미리 값을 지정하면서 aniControl을 하나 제작생성했습니다.

<src:AniControl x:Key="aniControl" Start="10" End="180" />

미리 제작한 Timeline1의 에니메이션 코드의 SplineDoubleKeyFrame 의 Value에 DataBind를 연결합니다.

<Storyboard x:Key="Timeline1">
 <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
        <SplineDoubleKeyFrame KeyTime="00:00:00"
                              Value="{Binding Source={StaticResource aniControl}, Path=Start}"/>
  <SplineDoubleKeyFrame KeyTime="00:00:02"
                              Value="{Binding Source={StaticResource aniControl}, Path=End}"/>
 </DoubleAnimationUsingKeyFrames>
</Storyboard>

이렇게 해서 실행해 보면 객체를 회전시킬 수 있습니다.
여기서 조금더 추가를 해서 Start, End의 값을 TextBox를 통해서 값을 받아서 회전 값을 처리하도록 구현했습니다.
TextBox의 값을 바로 바인딩해도 되지만 aniControl로 값을 보내도록 해봤습니다.

<TextBox HorizontalAlignment="Left" Margin="90,80,0,0" VerticalAlignment="Top" Width="56" Height="24"
         Text="{Binding Source={StaticResource aniControl}, Path=Start, Mode=TwoWay}"
         TextWrapping="Wrap" RenderTransformOrigin="0,0.333" x:Name="txtStart"/>
<TextBox HorizontalAlignment="Left" Margin="90,108,0,0" VerticalAlignment="Top" Width="56" Height="24"
         Text="{Binding Source={StaticResource aniControl}, Path=End, Mode=TwoWay}"

자세한 코드 내용은 소스를 한번 보시구요.
모르는거 있으시면 연락 주세요 ^^.

관련 소스 :

Posted by gsi
:

[WPF] ColorScroll Demo

WPF Sample 2007. 11. 27. 13:13 |

ColorScroll

사용자 삽입 이미지

3개의 슬라이드 바를 사용해서 칼라 값을 조정하는 데모 입니다.
MultiBinding을 사용해서 3개의 슬라이드 바의 값을 합쳐서 RGB로 만들어 내는 방법입니다.
여기에는 IValueConverter 를 상속받아서 처리 하는 코드도 같이 포함되어 있습니다.

관련 코드 :

Posted by gsi
:

ListCtrl의 한줄로 선택되도록 처리 하는 방법 + 그리드 라인을 같이 그려주는 코드
생성시에 한번 호출해서 설정해 주면 됩니다.


m_listPortSequencePerAddress.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

컬럼 설정하는 방법

// 리스트 컬럼 추가함수
void CDlgSequencePage::AddColumn()
{
 //컬럼 채우기
 int m_nColWidths[] = { 90, 60}; // sixty-fourths
 TCHAR * lpszHeaders[] = {
        _T("Port/Sequence"),
        _T("Address"),
        NULL };

 int i;
 LV_COLUMN lvcolumn;
 memset(&lvcolumn, 0, sizeof(lvcolumn));

 // add columns
 for (i = 0; ; i++) {
  if (lpszHeaders[i] == NULL)
   break;

  lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
  lvcolumn.fmt = LVCFMT_LEFT;
  lvcolumn.pszText = lpszHeaders[i];
  lvcolumn.iSubItem = i;
  lvcolumn.cx = m_nColWidths[i];
  m_listPortSequencePerAddress.InsertColumn(i, &lvcolumn);
 }
}

데이터 추가시
Lparam도 같이 추가할 때

void CDlgSequencePage::AddData(CString portName, int Address, lpFixtureElement pFixEle)
{
 CString strText;
 int index = 0;
 index = m_listPortSequencePerAddress.GetItemCount();

 // Insert the item, select every other item.
 strText = portName;
 int id = m_listPortSequencePerAddress.InsertItem(LVIF_TEXT|LVIF_PARAM, index, strText, 0, 0, 0, (LPARAM)pFixEle);

 // Insert 10 items in the list view control.
 strText.Format(TEXT("%d"), Address);
 m_listPortSequencePerAddress.SetItemText(index, 1, strText);
}

해당 Row를 선택시에 Lparam의 값을 가져와서 처리 하는 방법

void CDlgSequencePage::OnLvnItemchangedSequenceListInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

 static int oldSelectItemLine = -1;

 // 해당 아이템 번호가 항상 3번 호출되고 다른 번호가 들어오기 때문에
 // 여기서 걸러 준다.
 if(pNMLV->iItem != oldSelectItemLine) {
  oldSelectItemLine = pNMLV->iItem;

  // 리스트 컨트롤에 저장된 포인터 정보를 사용해서
  // 선택정보를 변경하자.
  lpFixtureElement pFixEle = (lpFixtureElement)m_listPortSequencePerAddress.GetItemData(pNMLV->iItem);
  ASSERT(pFixEle);
  FixtureArray::GetInstance().ChangedFixtureElement(pFixEle);

  // PixelMap View 화면을 업데이트 한다.
  g_PixelMapView->Invalidate();
 }

 *pResult = 0;
}


 

Posted by gsi
:

오늘 일단락 지었다.

기존에 뎁스 테스트가 제대로 되지 않는 부분에서 z-Buffer의 값을 16 에서 32로 바꿨으며,
화면에 제대로 나오지 않는 경우는

모델링 파일의 겹침 현상도 한몪을 한거 같다.
맥스에서 안보이는 부분을 없애고 메쉬들을 Attach 시킨 다음에 obj로 다시 뽑아 냈다.
화면에 제대로 나오는 것을 확인 했다.

화면에 Normal의 값이 반대로 나오는 것은 모델링 파일의 오류는 아니였고,
중간에 계산을 하는 과정에서 LookAt의 방향이 오류가 나 있었다.
메트릭스 값이 반대로 되어서 Normal의 값이 반대로 보였고 기타 다른 처리가 되지 않았다.

예전에도 고민한 부분이 있는거 같은데

투패스를 통해서 블랜딩 처리를 할때 DepthTest를 꺼고 했을때 잘 나오지만
다른 오브젝트와의 ZBuffer가 제대로 처리 되지 않아서 원하는 결과가 나오지 않는다.

이 부분은 DepthTest를 켜고 다시 한번 시도를 해봐야 할거 같다.
Posted by gsi
:

ProgressBar Demo

WPF Sample 2007. 11. 26. 13:06 |

Gsi ProgressBar Demo

사용자 삽입 이미지

Start 버튼을 누르면 프로그래스바가 100%까지 차는 모양을 도시해봤습니다.

- TextBlock의 값은 IValueConverter 를 사용해서 double의 값을 string형태로 변환했습니다.
- Rectangle을 사용해서 프로그래스바를 하나 작성했습니다.
- Rectangle의 Width의 속성을 사용해서 증가율을 표시 하고
   해당 증가율을 옆에 TextBlock로 하나 작성해서 뿌렸습니다.

바인딩은 Rectangle의 Width를 소스형태로 하고 TextBlock의 Text가 타겟형태로 구성
모드는 디폴트로 처리 했습니다.

관련 소스 :

Posted by gsi
:

이발하다.. ^^

내 일상 2007. 11. 26. 01:43 |

조금 길러 볼가 하는 머리카락을 잘랐다.

왠지 곱슬에.. 지저분해 보이는 머리가 너무 싫었다.

2:8 가르마를 연상시키고 M자를 연상 시키는 머리..
가끔 싫어진다.

그래서 오늘 과감하게. ^^
머리 자르는 분도 옆짱구라고 바로 되받아 친다.
그러면서 몽창몽창 머리를 잘랐다.
나름.. 괜찮아 보인다. (나만 그러겠지만. -.-)

역시. 이발은 여자가 많은 헤어샵이 좋다. ..
나이 들어서 그러겠지?... 그래도 모.. 좋다. ㅋㅋ
Posted by gsi
:

지금 OpenGL로 하는 프로젝트에 일부 참가를 하고 있다.

3D를 하면서 가장 난해하게 느끼는 점은 역시 비쥬얼이다.
맘에 역시 안든다. 이쁘게 보이고 싶고, 좋게 하고 싶지만,
구조 설계 하는거 보다 더 어렵다고 생각이 든다.

2일전인가 Depth 테스트가 제대로 안되는거 같아서 한참을 허둥대기도 했다.

답은 2개가 보인듯 했다. Depth의 비트를 32로 하는것과
좋은 그래픽 카드에서는 겹쳐 보이는 현상 같은건 발생하지 않았다는 거다.

아무래도 카드를 좋은걸 골라야 하는거 같기도 하다.

그리고 시뮬레이션을 하면서 게임화 되어 가는 화면 처리가 조금은 불만이다.
시뮬레이션은 시뮬레이션의 성격에 맞게 화면 처리가 정보가 우선시 되어야 한다고
생각이 든다. 많은 폴리곤에 좋은 조명 처리 이런거 보다.

정보를 보여 주기 위해서 좋은 인터페이스와 레이아웃, 그리고 효과적은 화면
처리가... 말은 어렵지만. 그게 우선시 되어야 할거 같다.

요즘 wpf를 공부 하면서 눈만 너무 높아 진거 같기도 하고,
맘은 있지만 표현이 부족해서 포기하는 일도 많지만.

계속 해야지.. 너무 잼나는 프로그램.. 이것저것 많은 언어를 접하면서도
그기에 맞는 효과적인 프로그램을 구사 할 수 있다는 확장성이야 말로.
많은 프로그램을 배우는데 정말 좋은 결과인듯 하다.

잘해보자.. iamgsi 화이팅!!
Posted by gsi
:

Gsi Image Viewer

내용 : CxImage를 이용한 MFC 버전 이미지 뷰어 (확대 가능)
코드 기술 :
1. MFC 를 이용, ListCtrl을 사용하였음
2. CxImage를 이용해서 DC에 이미지 출력

관련 이미지 :

사용자 삽입 이미지










관련 소스 :

Posted by gsi
:

GsiClock v0.1

WPF Sample 2007. 11. 22. 14:40 |

GsiClock v0.1


내용 : 시계
코드 기술 :
1. DependencyProperty 를 사용한 의존 프로퍼티 사용
2. DispatcherTimer 를 사용한 타이머 사용

관련 이미지 :
사용자 삽입 이미지
관련 소스 :
Posted by gsi
:

데이터 바인딩#1 - 기본
데이터 바인딩#2 - Binding Mode
데이터바인딩#3 - DataContext
데이터 바인딩#4 - TextBox vs Run
데이터 바인딩#5 - FrameWorkElement Demo
데이터 바인딩#6 - IValueConverter


이번 시간에는 변환에 대해서 알아 보겠습니다. 데이터 바인딩을 하다 보면 간혹 다른 타입의 데이터를 변환해서 사용해야 하는 경우가 발생합니다. 칼라 값을 변환해서 사용한다던지 아니면 실수형 데이터를 정수형 데이터로 변환해서 사용한다던지 하는 과정을 처리 해야 하는데요 이때 사용할 수 있는 것이 IValueConverter 인터페이스 입니다.

변환을 수행하는 클래스를 제작할때 반드시 IValueConverter 인터페이스를 구현해야 합니다.
그 형태는 아래와 같습니다.

public class MyConverter : IValueConverter
{
   public object Convert(object value, Type typeTarget,
                                                  object param, CultureInfo culture)
   {
      ...
   }

   public object ConvertBack(object value, Type typeTarget,
                                                    object param, CultureInfo culture)
   {
      ...
   }
}

value 인자는 변환될 객체이고 typeTarget는 변환될 객체의 타입입니다.
세번재 인자인 param은 Binding할때 ConvertParameter 프로퍼티가 명시한 객체가 들어가게 됩니다. 그리고 마지막 객체는 대부분 무시 됩니다.

그리고 변환을 위해서는 Convert, ConvertBack 두개가 반드시 필요 합니다.

C#에서는 아래와 같이 수행할 수 있습니다.
Binding bind = new Binding(); bind.Convert = new MyConverter();


아래의 코드는 Convert의 내용입니다.

    [ValueConversion(typeof(double), typeof(decimal))]
    class DoubleToDecimalConverter : IValueConverter
    {
        public object Convert(object value, Type typeTarget, object param, CultureInfo culture)
        {
            decimal num = new decimal((double)value);

            if (param != null)
                num = Decimal.Round(num, Int32.Parse(param as string));

            return num;
        }

        public object ConvertBack(object value, Type typeTarget, object param, CultureInfo culture)
        {
            return Decimal.ToDouble((decimal)value);
        }
    }

여기서 보시면 위쪽의 [ValueConversion(typeof(double), typeof(decimal))] 의 내용은 사실상 없어도 에러가 나거나 하지는 않습니다. 하지만 WPF 문서에서 보게 되면 이 구문을 클래스 정의의 바로 밑에 포함하게 권고 하고 있습니다. 제가 봐도 들어가 있을때 가독성 부분에서는 조금더 유연해 지지 않을까 생각 됩니다.

Convert를 xaml 코드에 연동하는 부분은 이전 강좌의 소스 코드 부분에 바로 적용해봤습니다.

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <src:DoubleToDecimalConverter x:Key="conv" />
    </Window.Resources>

    <StackPanel>
        <ScrollBar  Orientation="Horizontal"
                    Margin="24"
                    Maximum="100"
                    LargeChange="10"
                    SmallChange="1"
                    Value="{Binding ElementName=Simple, Path=Number, Mode=OneWayToSource}" />
       
        <src:SimpleElement x:Name="Simple" HorizontalAlignment="Center" />
       
        <ScrollBar  Name="scroll"
                    Orientation="Horizontal"
                    Margin="24"
                    Maximum="100"
                    LargeChange="10"
                    SmallChange="1"
                    Value="{Binding ElementName=Simple, Path=Number, Mode=OneWay}" Height="17" />
       
        <src:SimpleElement HorizontalAlignment="Center" Number="{Binding ElementName=scroll, Path=Value, Mode=OneWay, Converter={StaticResource conv}, ConverterParameter=2}" Height="50" />
    </StackPanel>
</Window>

xaml 코드에서는 위에서와 같이 Resource에서 IValueConverter를 구현하는 클래스를 명시해 주어야 합니다.
그리고 Binding 정의에서는 위에서와 같이 Converter={StaticResource conv}, ConverterParameter=2 를 해주시게 되면 됩니다.

추가적으로 public의 프로퍼티가 있을 경우 값을 추가한 후에 정보 전달도 가능합니다.
<src:DoubleToDecimalConverter Decimals="4" x:Key="conv" />
(Decimals 라는 public 프로퍼티가 선언되어 있다고 가정할때)

위의 코드의 결과는 이전의 강좌에서 소수점으로 쫙 나열되어 있는 정보를 소수 둘째 자리까지 자른후에 표시 할 수 있는 코드 입니다. ^^

그럼.. 오늘 강좌는 여기까지 ^^..
다음 강좌는 MultiBinding를 작성하도록 하겠습니다.

참고 ^^
본 내용은 "찰스페졸드의 WPF"의 내용을 이해 하고 나름 생각과 같이 정리한 겁니다.
제제가 가해질 경우 바로 삭제하도록 하겠습니다. ^^;
Posted by gsi
:

데이터 바인딩#1 - 기본
데이터 바인딩#2 - Binding Mode
데이터바인딩#3 - DataContext
데이터 바인딩#4 - TextBox vs Run
데이터 바인딩#5 - FrameWorkElement Demo
데이터 바인딩#6 - IValueConverter

저번 시간까지 텍스트에 대해서 알아 봤습니다.
이번 시간은 FrameElement를 사용하게 되면 좋은 효과를 볼 수 있는 데모를 보면서 의존 프로퍼티의 장점을 보도록 하겠습니다.

의존 프로퍼티 시스템은 내부에 통보 장치가 구현되어 있어서 바인딩 소스가 의존 프로퍼티가 될 필요가 없지만 의존 프로퍼티일 경우 상당히 유용해질 수 있습니다.
이 말은 소스가 의존 프로퍼티가 없어도 타겟의 경우 소스의 값을 참조 할 수 있지만, 의존 프로퍼티가 있을 경우 통지 메시지를 받을수 있어서 소스이지만 타깃의 기능을 사용할 수 있다 정도로 이해 하시고 다음 소스를 보시면 더 이해가 빠를 겁니다.

우선  FrameWorkElement 를 상속받은 클래스를 하나 생성합니다.

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Media;

namespace WpfApplication1
{
    class SimpleElement : FrameworkElement
    {
        // DependencyProperty 정의
        public static DependencyProperty NumberProperty;

        // 정적 생성자에 DependencyProperty 생성
        static SimpleElement()
        {
            NumberProperty =
                DependencyProperty.Register("Number", typeof(double),
                    typeof(SimpleElement),
                    new FrameworkPropertyMetadata(0.0,
                        FrameworkPropertyMetadataOptions.AffectsRender));
        }

        // DependencyProperty를 CLR 프로퍼티를 노출
        public double Number
        {
            set { SetValue(NumberProperty, value); }
            get { return (double)GetValue(NumberProperty); }
        }

        // MeasureOverride를 오버라이딩해 크기를 하드 코딩
        protected override Size MeasureOverride(Size availableSize)
        {
            //return base.MeasureOverride(availableSize);
            return new Size(200, 50);
        }

        // Number 프로퍼티를 보여주는 OnRender
        protected override void OnRender(DrawingContext dc)
        {
            dc.DrawText(
                new FormattedText(Number.ToString(),
                    CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                    new Typeface("Times New Roman"), 12,
                    SystemColors.WindowTextBrush),
                    new Point(0, 0));
        }
    }
}


이 클래스는 double라는 double 타입의 프로퍼티를 하나 정의 했습니다. 이 프로퍼티는 NumberProperty라는 DependencyProperty의 지원을 받게 됩니다.
FrameworkPropertyMetadata 는 초기값이 0 이며, 프로퍼티에 변화가 생기면 OnRender가 호출되고 화면이 갱신 됩니다.

이제 이 코드를 적용할 xaml 코드를 보겠습니다.
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
   
    <StackPanel>
        <ScrollBar  Orientation="Horizontal"
                    Margin="24"
                    Maximum="100"
                    LargeChange="10"
                    SmallChange="1"
                    Value="{Binding ElementName=Simple, Path=Number, Mode=OneWayToSource}" />
       
        <src:SimpleElement x:Name="Simple" HorizontalAlignment="Center" />
       
        <ScrollBar  Name="scroll"
                    Orientation="Horizontal"
                    Margin="24"
                    Maximum="100"
                    LargeChange="10"
                    SmallChange="1"
                    Value="{Binding ElementName=Simple, Path=Number, Mode=TwoWay}" />
       
        <src:SimpleElement HorizontalAlignment="Center" Number="{Binding ElementName=scroll, Path=Value, Mode=OneWay}"/>
    </StackPanel>
</Window>

SimpleElement 엘리먼트상의 x:Name 속성은 FrameworkElement를 상속받지 않은 XAML 엘리먼트를 위한 속성이다. 이 엘리먼트들은 Name 프로퍼티가 없기 때문에 Name 프로퍼티를 사용할 경우에는 에러가 발생한다. 이 에러는 "SimpleElement가 동일한 어셈블리에서 구현되었기 때문에 Name 속성 대신에 x:Name 속성을 사용해야함" 이다.

이 내용을 사용해서 행동을 해보면 아래와 같은 행동이 일어 난다.
첫 번째 ScrollBar를 움직이면  나머지 모든 정보가 바뀌게 된다.
두 번째 ScrollBar를 움직이면 첫 번째 ScrollBar는 움직이지 않는다.

사용자 삽입 이미지


첫 번째 ScrollBar는 OneWayToSource로 되어 있기 때문에 ScrollBar가 타깃이 되지만 내부적으로는 소스형태가 되는 것이다. 이전 강좌에서 말한 것처름 타깃이 소스로 날아 가는거라고 했다. 즉, ScrollBar의 값이 SimpleElement로 전달 되게 되는 것이다. 이것은 SimpleElement가 의존 프로퍼티의 형태를 뛰지 않았을때를 가정한다.

두 번째 ScrollBar는 TwoWay 형태를 취하고 있기 때문에 Element 로 값을 업데이트 하게 된다. x:Name 를 가지고 있는 SimpleEment로도 값을 보내게 되는 것이다.

설명은 여기 까지며 덫붙여 설명하면,

SimpleElement() 에 포함되어 있는 FrameworkPropertyMetadataOptions 의 옵션에는 데이터 바인딩을 처리해 줄 수 있는 옵션들이 포함되어 있다.

두 번째 ScrollBar의 Mode=OneWay를 하게 되면 첫 번째 ScrollBar와 연동되지 않으며,
첫번째 SimpleElement와도 연동되지 않는다.
OneWay로 하게 되면 위쪽의 SimpleEment의 값을 타깃으로 받을 수만 있고 넘겨 줄 수가 없게 되는 것이다.

이번 강좌는 여기까지 ^^.
OneWay, TwoWay, OneWayToSource에 대해서 조금은 더 테스트를 해보면서
확실하게 알아갈 필요가 있는듯 합니다.
FrameWorkElement의 이용에 대해서도 한번더 이해를 할 수 있는 시간이였습니다.

모두 수고 ^^

참고 ^^
본 내용은 "찰스페졸드의 WPF"의 내용을 이해 하고 나름 생각과 같이 정리한 겁니다.
제제가 가해질 경우 바로 삭제하도록 하겠습니다. ^^;
Posted by gsi
:

WPF Healthcare Demo

WPF 2007. 11. 21. 09:40 |

Friday, February 16

Impress your friends showcasing WPF

Copie d'écrande l'application WPF Patient monitoringYou surely already have seen demonstrations of the applications which can be made using Windows Presentation Foundation (formerly Avalon). At events like the Ready For a New Day Launch, for instance.

Among those, did you see that impressive healthcare monitoring application with pages rotating in 3D? Well, it's available now, together with its source code. It runs on Windows Vista, but also on Windows XP (provided you install the .net framework 3.0). Just download it there, and run it (it's already compiled).

Unzip it, go to the Healthcare_Prototype\sources\Avalon Patient Monitoring\bin\Release directory and double click Avalon Patient Monitoring.exe. And impress your friends.

From a technical standpoint: what's impressive is not as much the result (such applications could be made before WPF) as the fact this kind of applications can be created easily, quickly and in an elegant way with WPF. In the ZIP file you'll get, there's a PowerPoint document explaining what's behind the application.

Posted by gsi
:

DevDays 2007 세미나를 갔다 왔다.

가장 좋았던 세션은 10년 후를 내다보는 개발자의 커리어 개발 이거였던거 같다.

그중에 가장 인상깊은 말은 프로그램 언어를 많이 아는것도 필요하지만 기본적인
프로그램의 원리를 알아야 한다고 말했다.

예를 들어서 컴파일러는 어떻게 동작 하는거, 컴퓨터의 시스템 구조는 어떻게 돌아 가는가. 등등의 언어에 대한 기본 적인 지식 이후에 부딫히는 한계를 넘기 위해서는 기본 지식이 뒷받침 되어야 한다는 얘기인듯 했다.

기본

C++을 배우고 알고리즘 책도 조금씩 보고 디자인 패턴도 보고 하다 보면
이제 슬슬 프레임 웍을 어떻게 구성하고 어떤 형태로 작업 하는게 좋겠다는
라인업이 생기게 되는거 같다.

조금더 발전하는 개발자가 되고 향후 계속 개발을 할 수 있는 여건은 항상 기본에 있었던거 같다.

대한민국 개발자.. 모두 화이팅!!
Posted by gsi
:

10년 후 웃으려면… 길게 봐라, 내 재산


편안한 노후 준비됐나요 [上] 표2개로 출발하는 초간단 재무설계

“뭘 먹고 사나” 심각하게 고민해봅시다


금융시장이 급등락 중이다. 서브프라임(비우량주택담보대출) 부실에 따른 미국경기 침체가 계속될 경우 최근 몇 년간 해왔던 방식대로 단순히 펀드 투자에만 의존해서는 돈을 불리기 힘든 상황이 올 가능성이 적지 않다. 이럴 때는 투자의 원점으로 돌아가 보는 것도 좋은 방법이다. 재테크의 기본 목적이라고 할 수 있는 노후 설계 전략을 다시 한번 검토해 보는 시리즈를 2회에 걸쳐 게재한다.

편집자 주

사람이 80세에 가까운 긴 인생을 살아가려면 생애 주기(life cycle)에 따라 큰 돈이 들어가는 시기가 생긴다. 결혼을 할 때는 결혼자금이 필요하고, 아이가 생기면 교육자금이 필요하다. 또 가족이 함께 살 집을 구하려면 주택자금이 필요하고, 은퇴를 한 다음 행복한 노후생활을 보내려면 적절한 은퇴자금이 있어야 한다. 건강한 삶을 살고 직장에서 인정을 받는 것 못지않게 중요한 것이 바로 이런 돈을 제때 준비하는 것이다.수억 원이 들어가는 은퇴자금을 불과 몇 개월 만에 뚝딱 만들어낼 수 없는 것은 너무나 당연한 얘기다.


따라서 자신의 인생 설계도를 그릴 때는 삶의 목표를 실현할 수 있는 자금조달 계획을 함께 만드는 일이 중요하다. 이렇게 인생의 목표를 달성하기 위해 자신의 수입과 지출 흐름을 체크하고 자산과 부채, 투자 전략을 종합적으로 관리해 나가는 것을 ‘재무설계(financial planning)’라고 한다.

재무설계를 할 때 가장 중요한 것은 장기적인 안목으로 투자계획을 실천해 나가는 것이다. 1~2년 내에 기대했던 수익률이 나지 않는다고 하여 투자계획을 허물어 버리면 재테크와 별 차이가 없어져 버린다.

◆ 우선 나의 재무상태표를 만들어 보자

재무설계를 할 때 가장 먼저 해야 하는 것이 자신의 재무상태(재산상태)를 점검하는 일이다. 현재 나의 재산은 얼마이고 부채는 얼마이며, 또 매월 얼마의 소득을 올리고 소비지출은 얼마나 하는지를 살펴보는 것이다.

한국재무설계 오종윤 이사는 “자신의 재무상태를 정확히 진단하려면 재무상태표와 현금흐름표를 직접 만들어 보는 것이 좋다”고 말한다. 재무상태표는 기업들이 작성하는 대차대조표처럼 가계(家計)의 보유 자산과 부채를 종합적으로 파악하는 표이다.

보유 재산상황을 보여주는 자산항목은 크게 유동성자산, 투자자산, 사용자산으로 분류한다. 유동성자산은 수시로 입·출금이 가능한 은행 요구불예금과, 증권회사의 CMA MMF 같은 단기 저축상품을 말한다. 투자자산 항목에는 현재 투자가 진행되고 있는 주식과 펀드, 부동산, 저축성 예금, 연금 상품 등을 적어 넣는다.


또 부채 항목에는 현재 대출을 받아쓰고 있는 은행차입금 등 부채의 잔액을 기재한다. 그리고 자산에서 부채를 뺀 금액(순자산)을 부채 항목 아래에 써 넣으면 재무상태표 작성이 끝난다. 재무상태표를 보면 나의 재산이 현재 주식과 부동산, 예금 상품에 각각 얼마나 투자되어 있는지, 부채는 적정수준으로 관리되고 있는지를 쉽게 알 수 있다.

◆ 두번째 만들어 볼 것은 현금 흐름표

두번째로 만들어 볼 것은 현금흐름표다. 현금흐름표는 가계가 일정기간 동안 벌어들이는 소득액과 지출액을 나란히 정리한 것이다. 다시 말해 현금의 유입과 유출을 나타내는 표이다.

‘유입’ 쪽에는 본인이나 가족이 벌어들이는 소득, 기타 이자 소득 등을 적어 합계를 내 보고, ‘유출’ 쪽에는 고정적으로 나가는 비용, 일시적으로 나가는 비용, 저축과 투자를 나눠서 정리한다.

현금흐름표를 보면 내가 어디에 돈을 많이 쓰고 있는지, 그리고 저축액을 늘리려면 어느 지출 항목을 줄여야 하는지를 일목요연하게 파악할 수 있다. 저축과 투자 생활을 보다 효율적으로 하려는 사람들은 평소에 재무상태표와 현금흐름표를 만들어 재산상황의 변화를 수시로 점검해 보는 것이 필요하다.

◆ 필요한 자금 규모를 파악한 다음 투자를


이렇게 자신의 자산상태를 알고 난 다음에 본격적인 설계를 해 본다.

노후자금과 자녀 교육자금, 결혼자금 마련과 같은 개인의 재무적 목표를 세운 뒤 필요한 자금 규모를 계산해 본다. 이를 앞서 작성한 자신의 재산상태와 비교해 본다. 어느 정도 돈이 필요한지가 나올 것이다. 마지막 단계는 구체적인 투자 계획(plan)을 세운 다음 보유자산의 구성을 변경하거나 투자 상품을 골라 투자하는 것이 필요하다.

◆재무 설계

재무 설계와 재테크는 혼동하기 쉬운 비슷한 말이다. 그러나 재테크와 재무 설계는 개념의 차이가 있다. 재테크는 특별한 투자 계획을 세우기보다는 매순간 가장 좋은 상품을 선택해 돈을 굴리는 기술을 말한다. 쉽게 말해 1~6개월 정도의 단기 투자 위주로 돈을 굴리는 자금운용방식인 것이다. 이에 비해 재무 설계는 최소한 5년 이상 장기 투자 계획을 세워 돈을 체계적으로 관리해나가는 것을 말한다.
Posted by gsi
:

싱글톤 패턴

C++ 2007. 11. 19. 16:46 |

싱글톤 패턴.. - 내가 자주 쓰는 패턴..

class SymbolArray
{
 SymbolArray(void);
public:
 static SymbolArray& GetInstance()
 {
  static SymbolArray sym;
  return sym;
 }
 ~SymbolArray(void);
...
}

///
싱글톤에서 에러를 유발할 수 있는 요소를 아래와 같이 작성해서 처리 합니다.
 SymbolArray();
 SymbolArray(const SymbolArray&) {}
 SymbolArray& operator=(const SymbolArray&) {}
Posted by gsi
: