Visual C++ 10에서 디버깅하기

Visual C++ 10 2012. 4. 25. 00:28 Posted by 알 수 없는 사용자

예전에 Visual C++ 10과 관련된 책을 집필할 계획이 있어서 그때 작성한 글인데 책 출간 계획이 사라졌으므로(한참 전에)

그냥 공개합니다. 글은 초보자를 타겟으로 하고 있으며 Visula C++ 10의 디버깅 기능을 설명하고 있습니다.


도움이 되었으면 좋겠습니다^^



6장 디버깅.pdf


문서를 동의 없이 수정하지 않고, 출처만 남겨 주신다면 문서는 마음대로 배포하셔도 괜찮습니다^^


Welcome to Parallel C#(17) - 일단 마무리.

C# Parallel Programming 2012. 3. 26. 09:00 Posted by 알 수 없는 사용자

이 시리즈를 시작하고 참 오래도 걸렸네요 -_-;; 그래도 어떻게든 끝은 봐야겠기에 마지막 포스트를 씁니다! 이번 포스트에서는 간단한 예제를 하나 보여드리려고 합니다. 아주 간단한 예제이므로 굉장히 부주의한 코드가 곳곳에 숨어있으므로 주의 하시기 바랍니다. 허허허허허-_-;;;;


- 그래 무엇을 만들거냥?

보여드릴 예제는 멀티 다운로더 입니다. 다운로드 받을 url을 입력하면 동시에 여러 개의 파일을 다운로드할 수 있게 해주는 프로그램이죠. UI는 WPF로 구성합니다.


- 시이작!

자 그럼 우선, WPF 응용 프로그램을 MultiDownloader라는 이름으로 작성합니다. 작성되고 나면 MainWindow.xaml을 열어서 프로그램의 기본 UI를 다음과 같이 작성합니다.

<Window x:Class="MultiDownloader.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="멀티 다운로드" Height="318" Width="800">
    <Grid Height="284">
        <GroupBox Header="다운로드 목록" Height="238" HorizontalAlignment="Left" 
                  Margin="4,39,0,0" Name="groupBox1" VerticalAlignment="Top" 
                  Width="770">
            <ScrollViewer Height="216" Name="scrollViewer1" Width="754">
                <StackPanel Height="216" Name="downloadStack" Width="738" />
            </ScrollViewer>
        </GroupBox>
        <Button Content="추가" Height="23" HorizontalAlignment="Left" 
                Margin="10,10,0,0" Name="btnAddDownload" VerticalAlignment="Top" 
                Width="75" Click="btnAddDownload_Click" />
    </Grid>
</Window>

아주 간단한 UI인데요, 완성하면 다음과 같은 모양이 됩니다.

이제 '추가'버튼을 눌렀을 때 다운로드할 URL을 입력받을 창을 하나 만들어 보죠. 프로젝트에 AddDownload.xaml이라는 이름으로 창을 하나 추가합니다. 그리고 UI를 다음과 같이 작성합니다.

<Window x:Class="MultiDownloader.AddDownload"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="다운로드 추가" Height="115" Width="581" WindowStartupLocation="CenterOwner">
    <Grid>
        <Label Content="주소 :" Height="28" HorizontalAlignment="Left" 
               Margin="10,10,0,0" Name="label1" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="57,15,0,0" 
                 Name="txtDownloadLink" VerticalAlignment="Top" Width="490" 
                 AcceptsReturn="False" />
        <Button Content="추가" Height="23" HorizontalAlignment="Left" 
                Margin="391,44,0,0" Name="btnOK" VerticalAlignment="Top" 
                Width="75" Click="btnOK_Click" />
        <Button Content="취소" Height="23" HorizontalAlignment="Left" 
                Margin="472,44,0,0" Name="btnCancel" VerticalAlignment="Top" 
                Width="75" Click="btnCancel_Click" />
    </Grid>
</Window>

그러면 다음과 같은 모양이 됩니다.

그리고 AddDownload.xaml.cs에 다음과 같이 코드를 작성합니다.

using System.Windows;
using System.Text.RegularExpressions;
 
namespace MultiDownloader
{
    /// <summary>
    /// AddDownload.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class AddDownload : Window
    {
        //이벤트 형식을 선언한 델리게이트
        public delegate void AddDownloadLink(string url);
        //옵션 삭제 버튼을 처리할 이벤트
        public event AddDownloadLink AddDownloadLinkEvent;
        Regex regex;
 
        public AddDownload()
        {
            InitializeComponent();
 
            //올바른 URL을 검증할 정규식
            regex = new Regex(@"(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?");
        }
 
        private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            var result = regex.Match(txtDownloadLink.Text);
 
            //올바른 URL이 아닐경우
            if (!result.Success)
            {
                MessageBox.Show("입력하신 문자열은 올바른 URL이 아닙니닭.");
                return;
            }
 
            //다운로드 상태창을 하나 추가하는 이벤트 호출.
            if (AddDownloadLinkEvent != null)
            {
                AddDownloadLinkEvent(txtDownloadLink.Text);
            }
 
            this.Close();
        }
 
        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}

(위 코드의 정규식이 잘 안보이는데요, 옮겨 적자면 @"(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?" 입니다.)

정규식을 통해서 올바른 URL이 입력되었는지를 검증하고, 올바른 URL이 입력되었다면 MainWindow로 하여금 입력된 URL에 대한 다운로드 상태를 보여주는 다운로드 상태창을 하나 추가할 것을 이벤트로 알려줍니다. 그러면, 이제 다운로드 상태창을 작성해볼까욤. 프로젝트에 DownloadStatus.xaml이라는 이름으로 사용자 정의 컨트롤을 하나 추가합니다. 그리고 UI를 다음과 같이 구성합니다.

<UserControl x:Class="MultiDownloader.DownloadStatus"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="24" d:DesignWidth="735">
    <Grid Width="735">
        <Label Height="24" HorizontalAlignment="Left" Name="lblFileName"
               VerticalAlignment="Top" Width="154" />
        <ProgressBar Height="24" HorizontalAlignment="Left" Margin="393,1,0,0" 
                     Name="downloadProgress" VerticalAlignment="Top" Width="246" />
        <Button Content="시작" Height="24" HorizontalAlignment="Left" 
                Margin="649,1,0,0" Name="btnOrder" VerticalAlignment="Top" 
                Width="40" Click="btnOrder_Click" />
        <Button Content="삭제" Height="24" HorizontalAlignment="Left" 
                Margin="695,1,0,0" Name="btnDelete" VerticalAlignment="Top" 
                Width="40" Click="btnDelete_Click" />
        <Label Content="진행 :" Height="25" HorizontalAlignment="Left" 
               Margin="160,-1,0,0" Name="label1" VerticalAlignment="Top" />
        <Label Height="25" HorizontalAlignment="Right" Margin="0,0,348,0" 
               Name="lblStatus" VerticalAlignment="Top" Width="188" />
    </Grid>
</UserControl>

그러면 다음과 같은 모양이 됩니다.

그리고 DownloadStatus.xaml.cs에 다음과 같이 코딩합니다.

using System;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
 
namespace MultiDownloader
{
    /// <summary>
    /// DownloadStatus.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class DownloadStatus : UserControl
    {
        private Task downloadTask;
        private CancellationTokenSource cts;
        private bool isStarted = false;
        private bool isCanceled = false;
        private string url;
        private string fileName;
        WebClient client;
 
        //이벤트 형식을 선언한 델리게이트
        public delegate void DeleteThisStatus(DownloadStatus ds);
        //옵션 삭제 버튼을 처리할 이벤트
        public event DeleteThisStatus DeleteThisStatusEvent;
 
        /// <summary>
        /// 다운로드 상태창 생성자
        /// </summary>
        /// <param name="url">다운로드할 URL</param>
        public DownloadStatus(string url)
        {
            InitializeComponent();
 
            this.url = url;
            string[] temp = url.Split(new char[] {'/'});
            fileName = temp[temp.Length - 1];
            lblFileName.Content = fileName;
        }
 
        /// <summary>
        /// 다운로드 시작/취소 버튼
        /// </summary>
        private void btnOrder_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            ToggleStatus();
 
            if (isStarted)
            {
                try
                {
                    isCanceled = false;
                    StartDownload();
                }
                catch (Exception)
                {
                    MessageBox.Show("다운로드 중 오류가 발생했습니다.");
                    ToggleStatus();
                }
            }
            else
            {
                CancelDownload();
            }
        }
 
        /// <summary>
        /// 다운로드 취소
        /// </summary>
        private void CancelDownload()
        {
            isCanceled = true;            
            cts.Cancel();
            btnDelete.IsEnabled = true;
        }
 
        /// <summary>
        /// 다운로드 시작
        /// </summary>
        private void StartDownload()
        {
            cts = new CancellationTokenSource();
                        
            downloadProgress.Foreground = new SolidColorBrush(
                Colors.Green);
 
            downloadTask = Task.Factory.StartNew(() =>
                {
                    try
                    {
                        //비동기로 다운로드 작업을 시작
                        client = new WebClient();
                        client.DownloadFileAsync(new Uri(url), fileName);
                        client.DownloadFileCompleted += 
                            new AsyncCompletedEventHandler(client_DownloadFileCompleted);
                        client.DownloadProgressChanged += 
                            new DownloadProgressChangedEventHandler(
                                client_DownloadProgressChanged);
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }, cts.Token);
 
            downloadTask.Wait();
        }
 
        //다운로드의 진행도가 바뀔 때마다 호출됨.
        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            //다운로드가 취소된 경우.
            if (isCanceled)
            {
                isCanceled = !isCanceled;                
                client.CancelAsync();
 
                downloadProgress.Dispatcher.BeginInvoke(new Action(() =>
                {
                    downloadProgress.Foreground = new SolidColorBrush(Colors.Red);
                }));
 
                return;
            }
 
            //다운로드가 계속 진행되는 경우, 진행도를 업데이트
            downloadProgress.Dispatcher.BeginInvoke(new Action(() =>
            {
                downloadProgress.Value = e.ProgressPercentage;
            }));
 
            lblStatus.Dispatcher.BeginInvoke(new Action(() =>
                {
                    lblStatus.Content = string.Format("{0}수신, {1}%",
                        FormatBytes(e.BytesReceived),
                        e.ProgressPercentage);
                }));
        }
 
        //다운로드 완료시 호출
        void client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            downloadProgress.Dispatcher.BeginInvoke(new Action(() =>
            {
                downloadProgress.Foreground = new SolidColorBrush(Colors.OrangeRed);
            }));
        }
 
        //버튼의 상태를 관리
        private void ToggleStatus()
        {
            isStarted = !isStarted;
            if (isStarted)
            {
                btnOrder.Content = "취소";
                btnDelete.IsEnabled = false;
            }
            else
            {
                btnOrder.Content = "시작";
                btnDelete.IsEnabled = true;
            }
        }
 
        //다운로드 완료 상태 설정
        private void CompletedStatus()
        {
            btnOrder.IsEnabled = false;
        }
 
        //다운로드 받은 크기를 표시할 메서드
        private static string FormatBytes(long bytes)
        {
            string[] magnitudes =
                new string[] { "GB""MB""KB""Bytes" };
            long max = (long)Math.Pow(1024, magnitudes.Length);
 
            return string.Format("{1:##.##} {0}",
                magnitudes.FirstOrDefault(magnitude => bytes > (max /= 1024)),
                (decimal)bytes / (decimal)max).Trim();
        }
 
        //삭제 버튼 처리기
        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            if (DeleteThisStatusEvent != null)
            {
                DeleteThisStatusEvent(this);
            }
        }
    }
}

다운로드를 실행할 Task와 취소 요청을 처리할 CancellationTokenSource, 그리고 URL에 대한 다운로드를 처리할  WebClient객체가 변수로 선언되어 있구요, 추가로 삭제버튼을 누를시에 MainWindow로 하여금 해당 다운로드를 삭제하도록 통지하는 이벤트 역시 정의되어 있습니다. 다운로드를 시작하면 Task객체를 통해서 작업을 할당하고 그에 대한 취소 토큰을 설정해줍니다. 그리고 추가로 다운로드의 상태를 표시할 때 사용할 코드들로 구성이 되어 있습니다. 그러면 마지막으로 MainWindow.xaml.cs로 가서 모든 코드를 엮어 볼까욤.

using System.Collections.Generic;
using System.Windows;
 
namespace MultiDownloader
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        //다운로드 상태창을 저장할 리스트
        private List<DownloadStatus> statusList = new List<DownloadStatus>();
 
        public MainWindow()
        {
            InitializeComponent();
        }
 
        //다운로드 링크 추가버튼 처리기
        private void btnAddDownload_Click(object sender, RoutedEventArgs e)
        {
            AddDownload addDownload = new AddDownload();
            addDownload.AddDownloadLinkEvent +=
                    addDownload_AddDownloadLinkEvent;
            addDownload.ShowDialog();
        }
 
        //다운로드 링크 추가성공 처리기
        void addDownload_AddDownloadLinkEvent(string url)
        {
            DownloadStatus downloadStatus = new DownloadStatus(url);
            downloadStatus.DeleteThisStatusEvent += 
                new DownloadStatus.DeleteThisStatus(
                    downloadStatus_DeleteThisStatusEvent);
            statusList.Add(downloadStatus);
            downloadStack.Children.Add(downloadStatus);
        }
 
        //다운로드 상태창 제거 처리기
        void downloadStatus_DeleteThisStatusEvent(DownloadStatus ds)
        {
            downloadStack.Children.Remove(ds);
        }
    }
}

별다른 내용 없이, 그저 이벤트들에 대한 처리기로 구성이 되어 있음을 알 수 있습니다. 다운로드를 추가할 때, AddDownload를 생성하면서 추가버튼이 눌릴 때 발생할 이벤트에 대한 처리와 다운로드 상태 창을 추가하면서 삭제 버튼이 눌릴 때 어떻게 처리할 지에 대한 코드인 것이죠.


- 그럼 실행해보자!

네, 이제 작성이 완료 되었습니다. 그럼 실행을 해봐야죵~? 프로그램을 실행하고 SQL서버 2008 Express에 대한 다운로드 링크를 추가해본 모습입니다.

그리고 시작을 눌러서 진행하면 다음과 같이 각자 다운로드를 시작합니다.

완성된 소스는 맨 아래에 첨부해드리겠습니다~!


- 끗.

네. 뭐 만들고 보니 별 거 없네요. ㅎㅎㅎㅎ 그래도 시리즈를 마무리 지은 거 같아서 마음은 한 결 가볍습니다. 도움이 되신 분이 있으면 좋겠구요, 허접한 시리즈 보시느라 고생하셨습니다. 끗!

MSDN Virtual Lab에서는 Microsoft Team Foundation Server 2010 제품을 온라인으로 트레이닝 받을 수 있는 서비스가 있습니다. Team Foundation Server 2010 을 설치할 여력이 되지 않거나, 제품을 직접 시연하고 싶은 사용자에게 가상 환경을 제공해 주고, 가상 환경에서 여러 시나리오를 따라해 볼 수 있습니다.

이 MSDN Virtual Lab 환경은 Internet Explorer 만 있으면 곧바로 서비스를 체험할 수 있습니다. 다만, 이 서비스는 가상의 환경으로 제공이 되기 때문에 가상 환경에서 실습이 끝난 이후에는 생성된 팀 프로젝트와 데이터는 모두 삭제가 됩니다.

실습은 모두 3가지의 모듈로 제공이 됩니다.

   

먼저 실습을 하고자 하는 모듈의 주소를 Internet Explorer 를 통해 접속을 합니다.

   

Launch Virtual Lab을 선택하면 아래와 같은 팝업이 뜨는데, 실습 환경의 가상 환경을 제공하기 위한 준비를 합니다. 아마도 실습을 하기 위한 스냅샷으로 돌아가고 있겠지요..?

   

이 가상 환경 실습은 원격 데스크톱 연결을 이용하는데, Connect 버튼을 클릭하면 곧바로 가상 환경을 원격 데스크톱 세션을 통해 접속이 됩니다.

   

접속이 되면 가상 환경 접속에 접속할 수 있는데, 마치 Hyper-V 관리 콘솔과 같은 화면이 나타납니다. 물론 단 하나의 VS2010CTP 라는 가상환경에만 접근할 수 있습니다.

   

아래오 같이 가상 환경이 접속이 되면, 텅 빈 윈도우 바탕 화면이 나타나는데, Start 버튼을 클릭하면 우리가 실습에 필요한 모든 소프트웨어가 설치가 되어 있습니다. 우측의 패널에는 실습 단계를 차례대로 진행할 수 있고, 상단에 HTML과 PDF 문서를 다운로드 받을 수 있습니다.

   

사실 Team Foundation Server 2010의 MSDN Virtual Lab 서비스가 나온지는 좀 되었지만, 아직 많이 알려지지는 않은 듯 합니다. 소프트웨어 패키지를 구매하고 설치하고 MSDN을 통해 기능을 익힐 수 있지만, 이렇게 가상화 서비스를 이용해 부담 없이 하드웨어나 환경적인 제약 없이 실습 공간을 제공해 주는 것을 보면 Before Services 가 짱 이네요.

(BE란 ? 고객들이 제품 구매에 앞서 제품을 직접 써보거나 충분히 경험해 본 다음 구매를 결정할 수 있도록 하는 다양한 체험 프로그램 서비스를 말한다. 기존 서비스 방식인 애프터서비스(AS)는 고객들이 제품을 구매한 후 제품에 대한 차후 서비스를 받을 수 있다. )

 


Visual Studio 11의 솔루션 탐색기는 이전 버전에 비해 매우 독특한 구조를 가지게 되었습니다. 그 중에서 Visual Studio 11에서 솔루션 탐색기 기능을 최대한 활용하는 방법을 살펴볼텐데요, 그냥 가볍게 보시면 될 것 같습니다.

1. 다중 인스턴스로 사용하기

다중 인스턴스는 솔루션 탐색기를 하나가 아닌 여러 개로 띄울 수 있는데요. 단, 현재 로드된 솔루션의 솔루션 탐색기 인스턴스를 생성할 수 있습니다. 만약, Visual Studio 11에서 여러 솔루션을 하나의 Visual Studio 11 인스턴스에서 실행할 수 있다면 다중 인스턴스의 솔루션 탐색기가 더욱 편리할 거라는 아쉬움이 있네요.

아래의 그림과 같이 우측 끝에 있는 아이콘을 클릭하면 똑같은 인스턴스를 생성한답니다.

여러 솔루션 탐색기의 인스턴스를 사용하여 프로그래을 작성하는 프로젝트에 스크롤을 위치시키고, 또 하나는 단위 테스트 프로젝트에… 또 하나는 전체 솔루션이 훤히 보이도록 띄어놓았습니다.

이제 하나의 솔루션 탐색기에서 마우스 스크롤 쫙쫙~ 올리고 내리고 할 필요가 없어졌네요. 더불어 멀티 모니터를 사용한다면 효과가 금상첨화겠지요?

   

2. 코드 파일 미리보기

중간에 보이는 아이콘의 이름 "Preview Selected Items"은 말 그대로 코드 파일을 미리 보는 기능이랍니다. 이 옵션은 Visual Studio 11을 설치하면 기본적으로 선택되는 옵션입니다.

이 기능은 솔루션 탐색기에 파일을 한 번 클릭할 때마다 에디터 창이 열립니다. 좌측의 빨간색 탭은 솔루션 탐색기에서 코드 파일을 더블 클릭하거나 F7을 누를 때 일반적으로 좌측부터 정렬되는 에디터입니다.

오른쪽의 노란색의 탭 하나가 바로 한 번 클릭할 때마다 열리는 미리 보기 탭입니다. (필자는 개인적으로 이 옵션을 껐답니다 ^^;)

   

3. 솔루션 탐색기를 격리시키기

솔루션 탐색기를 격리시키는 방법(용어는 필자가 나름대로 칭하였습니다)입니다. 이 방법이 꽤나 쓸만한 기능인데, 솔루션 탐색기의 선택된 항목이 솔루션 탐색기의 최상위 루트가 되는 기능입니다. 예를 들어, 아래와 같이 Core 프로젝트를 펼치면 굉장히 길어지는데요, 단위 테스트도 같이 하려면 Core.Tests 프로젝트도 펼쳐져 있어야 합니다. 이러다가 대부분 솔루션 탐색기가 위아래 정신 없이 스크롤하게 됩니다.

   

그럼 솔루션 탐색기 다중 인스턴스를 이용해서 좀 더 스마트하게 사용해 볼까요? 바로 "Scope to This" 기능입니다.

   

이 기능을 이용해서 아래와 같이 스마트하게 솔루션 탐색기를 배치할 수 있습니다. 자주 코딩하는 Core 프로젝트랑 Core.Tests 프로젝트랑 각각 최상위 루트에 배치해서 귀찮은 스크롤도 없어지고 하위 여러 자식의 트리구조를 없애서 보기에 깔끔해 졌네요.

   

이런 경우는 인터페이스 프로그래밍을 할 때도 매우 유용합니다. 인터페이스를 선언하고 이를 구현하면 서로간에 왔다 갔다 하는 경우가 매우 많거든요. "Scope to This" 기능으로 좌측에 인터페이스 파일 하나만 배치시키고, 우측에서는 인터페이스를 구현하고 파생되는 구현 클래스가 뭉쳐있는 폴더만 격리시켰습니다.

 

어때요? 이제 솔루션 탐색기를 스마트하게 사용할 수 있겠지요?

Apache Hadoop to a Windows Azure

Cloud 2012. 3. 12. 08:30 Posted by 알 수 없는 사용자


Apache Hadoop to a Windows Azure

저번에 블로깅(http://redju.tistory.com/128)에 이어 Developer Preview 메일을 받았습니다.

HadoopOnAzure.com에 로그인해서 좀 더 구체적으로 Apache Hadoop on Windows Azure를 살펴볼 수 있게 되었습니다.

직접 경험해보실 분들은 https://www.hadooponazure.com/ 사이트의 Invitation을 클릭해보십시오~

관련 링크는 아래를 참조하실 수 있습니다.

l General Overview: http://social.technet.microsoft.com/wiki/contents/articles/apache-hadoop-on-windows.aspx

l Apache Hadoop-based Services for Windows Azure How-To and FAQ Guide:http://social.technet.microsoft.com/wiki/contents/articles/apache-hadoop-based-services-for-windows-azure-how-to-and-faq-guide.aspx

l Microsoft Hadoop Distribution Documentation Plan: http://social.technet.microsoft.com/wiki/contents/articles/microsoft-hadoop-distribution-documentation-plan.aspx

How to를 통해서 처음 설정부터 Hadoop을 이용한 BI 내용까지 쭉 진행해보도록 하겠습니다.



SharePoint 2010에서의 Chart

SharePoint 2010 2012. 3. 9. 08:30 Posted by 알 수 없는 사용자


SharePoint 2010
에서의 Chart

Chart SharePoint 2010에서 나타내기 위해서는 여러 가지 방법이 있습니다.

l 차트 웹 파트

l Excel 액세스 웹 파트

l 사용자 지정 웹 파트(웹 파트, 비쥬얼 웹 파트)

l Silverlight Chart 웹 파트

Chart의 데이터는 Excel 데이터이거나 SharePoint의 목록에 있을 수도 있으며, XML이나 서비스를 통해서 액세스할 수도 있으며 또는 코드에 값을 고정(하드코드)해둘 수 도 있습니다.

여기서는 ASP.NET Chart 컨트롤을 이용하여 SharePoint 2010 웹 파트를 구성해보도록 하겠습니다.

ASP.NET 차트에 대한 내용은 아래 링크를 통해서 Chart gallery 프로젝트를 통해서 살펴볼 수 있습니다.

http://archive.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=4418

위의 ASP.NET Chart 컨트롤을 통해서 SharePoint 2010에 비쥬얼 웹 파트를 구성해서 처리해보도록 하겠습니다. SharePoint 2010의 데이터에 액세스하기 위해서는 SharePoint Object Model, Client Object Model, REST Service를 통해서 가능합니다.
(
http://redju.tistory.com/23)

비쥬얼 웹 파트 프로젝트를 생성하고 솔루션 탐색기에서 System.Web.DataVisualization 어셈블리를 참조 추가합니다. 그리고 위 그림의 Sample 프로젝트에서 html 소스와 c# 소스를 복사하고 일부를 원하는 대로 수정합니다.

ChartTypes\PieDoughnutCharts\3DPie\pie3d.aspx

3D의 경우 속성이 달라서 아래와 같이 수정했습니다.

// Enable 3D

Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D= true;

웹 파트를 배포한다고 해서 바로 보여지지는 않습니다. 해당 SharePoint 웹 응용 프로그램의 Web.Config를 아래와 같이 수정합니다.

l System.Web 아래의 httpHandlers

<httpHandlers>

<add path="ChartImg.axd" verb="GET,HEAD,POST" preCondition="integratedMode" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />

l appSettings

<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\Temp\;" />

</appSettings>

l System.WebServer 아래의 handlers

<add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

최종 결과는 아래와 같습니다.



SQL Azure 에서의 비즈니스 연속성(Business Continuity)

Cloud 2012. 3. 7. 08:30 Posted by 알 수 없는 사용자


SQL Azure
에서의 비즈니스 연속성(Business Continuity)

BCP(Business Continuity Plan)에 대한 내용은 RTO, RPO에 대한 내용을 다루게 됩니다. 클라우드 환경에서는 BCP에 대한 내용은 어떻게 접근해야 할까요?


아래 링크를 참조하시면 SQL Azure에서의 비즈니스 연속성에 대한 내용에 대한 부분이 잘 정리된 것을 확인 가능합니다.

http://msdn.microsoft.com/en-us/library/hh852669.aspx

SQL Azure 데이터 보호

l 별도 서버나 장치

l 잘못된 삭제나 수정

l 데이터 센터 장비 문제

3가지 내용 중에서 잘못된 삭제나 수정에 대한 부분은 Copy Of 구문을 통해 구성할 수 있는데 SNAPSHOT 과 유사하며 COPY 백업과도 유사합니다.

데이터 센터 장비 문제로부터의 보호는 별도로 백업하는 것과 유사한 방법입니다.

BACPAC을 이용하는 것이죠, 차후 좀더 자세히 다루어보기로 하겠습니다만 예전부터 데이터 계층 응용프로그램과 데이터 내보내기/가져오기에서 계속 얘기했던 내용입니다.

위 링크의 아래 그림을 참고하십시오.


BACPAC Windows Azure Storage로 내보내기 하고 이를 다른 서버나 데이터 센터에서 가져오기를 해서 하거나 로컬 On-Premise SQL 서버로 가져오기 가능합니다.

BACPAC과 데이터 계층 응용프로그램에 대한 내용은 별도로 추가로 다루어보도록 하겠습니다. 또한 데이터 동기화 (SQL Azure Data Sync) 에 대한 내용도 다루겠습니다.

위 링크를 참조하시면 클라우드의 SQL Azure에서도 다양한 방법으로 비즈니스 연속성을 제공한다는 것을 알 수 있습니다.


'Cloud' 카테고리의 다른 글

Apache Hadoop to a Windows Azure  (0) 2012.03.12
Apache Hadoop On Windows  (0) 2012.02.24
SQL Azure 가격 변경 및 100MB 데이터베이스  (1) 2012.02.20
SQL Azure Q2 2011 Service Release  (0) 2011.09.29
SQL Azure Data Sync (3) – 고려사항  (0) 2011.09.22

Visual Studio 2005버전부터 만들어온 VSGesture 확장 도구가 Visual Studio 2008, Visual Studio 2010, 그리고 Visual Studio 11버전까지 나왔습니다. VSGesture는 Visual Studio에서 마우스 오른쪽 버튼을 이용하여 제스쳐를 하면 여러 가지 동작을 하는 확장 도구 입니다.

   

   

   

현재 이 확장 도구는 이미 오픈 소스로 공개를 하였답니다.

http://vsgesture.codeplex.com

   

그 밖에 오픈 소스로 공개한 다른 것들도 구경해 보시고요.

Umc.Core Framework http://umccore.codeplex.com/

jQuery DateTimePicker http://umcdatetimepicker.codeplex.com/

MEFGeneric http://mefgeneric.codeplex.com/

vutpp for VS2010 http://vutpp.codeplex.com/

   

기타 무료 확장 도구 및 Visual Studio 백서

http://www.powerumc.kr/ko-kr/products.aspx

   

   

웹을 통해 이 버전을 다운로드 받으려면 다음의 링크를 참고하세요.

Visual Studio 11, 2010 - http://visualstudiogallery.msdn.microsoft.com/e03c91ff-e20d-4dcc-822b-172a68c40f5b

Visual Studio 2005, 2008 - http://visualstudiogallery.msdn.microsoft.com/F5007932-0720-492B-8A51-631D5265F6B7

   

   

Visual Studio 2010, 11 에서는 Tools(도구) -> Extension Manager(확장 관리자)를 이용하여 바로 설치할 수 있습니다.




Get Microsoft Silverlight

Visual Studio Extensibility 라고 부르는 VSX를 Visual Studio 2010에서 Visual Studio 11로 업그레이드를 해야 하는데, Visual Studio 11버전부터 그리 어려운 작업이 아닙니다. 

과거 VSX 프로젝트를 Visual Studio 2008에서 Visual Studio 2010으로 업그레이드하려면 좀 골치가 아팠습니다. 기존에는 코드 에디터 제어를 Visual Studio Native에서 제공하는 Interface를 사용했지만, Visual Studio 2010부터 코드 에디터가 WPF로 바뀌면서 이 부분은 모조리 변경해야 했거든요.

  

  

아시다시피 Visual Studio Gallery에 공개한 VSGesture for VS2008버전과 VSGesture for VS2010의 구현이 완전 달라졌을 정도니까요. 물론 이 확장 기능은 필자가 VSGESTURE.CODEPLEX.COM에 공개해 놓았으니 소스 코드도 받으실 수 있습니다.

  

Visual Studio 11로 VSX 업그레이드에 대한 더 자세한 내용은 다음의 문서를 참고하시기 바랍니다.

http://msdn.microsoft.com/en-us/library/hh567449(v=vs.110).aspx

  

일단 Visual Studio 11에서 프로젝트를 엽니다.

Visual Studio 11에서 프로젝트를 열어보니, 알아서 몇몇 파일들은 알아서 체크아웃이 되네요. 아마도 Resources 파일과 관련해서 뭔가가 바뀌었나 봅니다.

  

Source.Extension.VsixManifest 파일을 엽니다.

이 메니페스트 파일은 배포에 필요한 정보를 담고 있습니다. 확장 기능의 고유 GUID와 확장 기능 이름, 버전, 컨텐트 정보 등이 담겨져 있습니다.

그런데 그냥 XML 파일이 열리네요. Visual Studio 2010 SDK를 설치하면 그나마 GUI가 제공이 되었는데, 아직 Visual Studio 11 Beta SDK 라서 제공이 안되나 봅니다.

  

[Visual Studio 2010 SDK 의 GUI Manifest 구성 에디터]

  

어쨌든 XML 파일이 열리더라도 그리 어려운 작업은 아닙니다. 그냥 몇 가지 구성만 추가해 주면 됩니다.

  

SupportedProducts 구성 추가

XML 내용의 SupportedProducts 섹션에 다음과 같이 Visual Studio 11버전과 지원할 Edition 목록을 추가하면 됩니다.

  

  

어셈블리 참조를 추가해 줍니다.

이 어셈블리들은 Visual Studio 11 SDK 를 설치하시고, 다음의 경로에서 찾을 수 있습니다.

%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Common\Assemblies\v4.0

  

  • Microsoft.VisualStudio.Editor.dll
  • Microsoft.VisualStudio.Language.Intellisense.dll
  • Microsoft.VisualStudio.Shell.10.0.immutable.dll
  • Microsoft.VisualStudio.Shell.11.0.immutable.dll
  • Microsoft.VisualStudio.Shell.11.0.dll

  

  

그 외에…

실제로 VSX의 기능에 따라 변경해 주어야 할 부분이 더 많더군요. 그 부분은 VSX 개발하시는 분들이 알아서 하시리라 믿습니다.^^

개발자에게 Visual Studio 11의 가장 큰 장점 중에 하나가 될 바로 코드 에디터 입니다. 특히 C++ 개발자에게 원성을 샀던 부실했던 C++ 코드 에디터는 기존의 C,#, VB.NET 과 동등할 정도로 코드 에디터의 구현에 충실해 다른 확장 도구의 도움 없이도 충분히 사용이 가능합니다. (Visual C++ 의 코드 에디터는 그 흔한 코드 컬러링도 기대 이하의 수준이었거든요)

   

C++ 코드 에디터

C++ 개발자에게는 C++ 코드 편집기의 컬러링과 인텔리센스는 정말 희소식일 것 같습니다. C++ 개발자는 기본적인 코드 작성에 Visual Assist 툴에 많이 의존하였었지만, 이제 외부 도구의 도움이 없이도 코드 작성에 어려움은 없을 것 같습니다. 

아래의 Visual Studio 2010과 Visual Studio 11의 C++ 코드 에디터를 그냥 눈으로 쓱 훑어보시기 바랍니다.

   

Visual Studio 2010의 C++ 코드 에디터

   

Visual Studio 11의 C++ 코드 에디터

   

   

   

C++/CLI 코드 에디터

특히 C++/CLI 를 자주 쓰는 분들에게는 더욱 특별할 수 있을 겁니다. C++/CLI 는 이전버전까지 예쁜 컬러링은 물론이거니와 인텔리센스도 작동하지 않는 암울한 환경에서 코드를 작성해야 했었습니다. 특히 C++/CLI 를 이용하여 C++ 코드를 단위 테스트할 때 무척 유용하였는데, 이번 컬러링과 인텔리센스 기능으로 더욱 활용도가 높아질 것 같습니다.

마찬가지로 Visual Studio 2010의 C++/CLI와 Visual Studio 11의 C++/CLI의 코드 에디터를 한번 보시죠.

   

Visual Studio 2010 C++/CLI 코드 에디터

   

Visual studio 11 C++/CLI 코드 에디터

C#, VB.NET 과 동급한 레벨로 인텔리센스와 코드 컬러링을 제공합니다. 그리고 Code Snippet도 제공되니 코딩이 한껏 즐거워지겠네요.

   

   

   

JavaScript 코드 에디터

JavaScript 는 웹 개발 환경에서 필수 언어로써, 개발 툴에서 JavaScript 인텔리센스 지원이 점점 좋아지고 있네요. Visual Studio 11 Beta 에서는 JavaScript 인텔리센스의 성능이 향상이 되거나 HTML5 등을 지원하는데요.

그 중, Lazy Initialize와 Lazy Loading 부분에서 상당히 만족할만한 수준으로 인텔리센스 기능이 좋아졌습니다.

   

JavaScript 코드 에디터에 대한 더 자세한 내용은 다음의 링크를 참고하십시오.

http://msdn.microsoft.com/en-us/library/bb385682(v=vs.110).aspx

   

JavaScript 코드 에디터의 인텔리센스가 얼마나 똑똑해 졌는지 아래의 예시를 보면서 비교해 보시기 바랍니다.

   

Visual Studio 2010 JavaScript 인텔리센스

인텔리센스가 C#, VB.NET 과 다르게 인텔리센스의 범위가 축소가 되지 않고 그냥 다~~~ 보여주지요.

   

   

Visual Studio 11 JavaScript 인텔리센스

JavaScript 인텔리센스가 C#, VB.NET 에서 사용하는 것과 똑같이 입력하는 문자에 따라 점점 인텔리센스 범위가 축소가 됩니다. 그리고 인텔리센스 상자 오른쪽에 시그너처도 함께 표시해 주네요.

   

   

JavaScript OOP 프로그래밍 인텔리센스

특히 JavaScript OOP 프로그래밍을 할 때는 인텔리센스의 도움을 많이 받게 되지요. Visual Studio 11 의 JavaScript 구문을 제대로 분석하여 인텔리센스를 제공해 주는 것 또한 막강한 Visual Studio 11 기능이라고 할 수 있습니다.

특히 Visual Studio 2010을 사용할 때 필자는 JavaScript OOP 프로그래밍을 절대 Visual Studio 2010에서 하지 않았답니다. 왜냐하면 제대로 인텔리센스를 보여주지 못하거나 올바른 인텔리센스 목록이 제공이 되지 않으면, 아차 하는 순간 코드가 동작을 안하거든요.

   

마찬가지로 Visual Studio 2010과 Visual Studio 11의 JavaScript OOP 인텔리센스를 비교해보시죠.

   

Visual Studio 2010 JavaScript OOP 인텔리센스

아주 간단한 JavaScript Initialize 패턴과 Simple Factory 패턴의 New() 메서드를 인식하지 못합니다. 물론 아래의 코드는 잘못된 코드가 아니겠지요.

   

Visual Studio 11 Beta JavaScript OOP 인텔리센스

Visual Studio 2010 JavaScript 인텔리센스에 비해 Visual Studio 11 Beta 는 Lazy Initialize 패턴과 Simple Factory 패턴 구문을 정확하게 분석하여 인텔리센스 목록에 New() 메서드를 깔끔하게 보여주고 있습니다.

   

   


Visual Studio 11, 검색 기능 강화

Visual Studio 2012 2012. 3. 5. 08:00 Posted by POWERUMC

솔루션 탐색기의 코드 미리 보기

솔루션 탐색기에서 코드 파일의 클래스나 메서드, 필드 정보를 TreeView에서 확장하여 바로 볼 수 있게 되었군요. 물론 하위 정보들을 더블 클릭하면 바로 코드의 위치로 이동하겠죠.

   

설마 다른 개발 도구를 사용하는 분들이 보시면 여태 그런 기능도 제공이 안되었냐고 오해할 수 있을 수 있겠군요. 아래의 모든 기능들은 Microsoft에서 개발하여 배포한 Visual Studio 확장 도구를 통해 사용이 가능했었고, Visual Studio 11에 와서 Product Features로 들어가게 된 것들입니다.

   

이전 버전인 Visual Studio 2010에서 필수 앱이었죠.

PowerCommands for Visual Studio 2010, Productivity Power Tools

   

   

   

코드 윈도우 고정 핀

자주 사용하는 코드 파일을 아예 핀을 이용하여 좌측으로 고정할 수 있습니다. 필자는 구현 클래스나 참조 클래스들의 탭 위치가 뒤죽박죽이 되면 열 받아서 'Close All Windows' 를 해버리고 다시 정리하는 습관이 있었는데, 이 고정 핀 덕분에 효과를 톡톡히 보고 있습니다.

   

솔루션 탐색기 창의 다중 인스턴스

이번 Visual Studio 11에서는 솔루션 탐색기를 다중 인스턴스로 열어서 사용이 가능합니다. 아래의 그림과 같이 솔루션 탐색기가 여러 개가 열려 있지요.

필자도 이런 기능이 꼭 필요했답니다. 왜냐하면 솔루션의 폴더 구조가 복잡하거나 프로젝트 양이 많아지게 되면 솔루션 탐색기에서 마우스 휠을 올렸다 내렸다 하면서 파일을 찾느라 정신이 없거든요. 솔루션 탐색기를 한 두어개 열어놓고 미리 자주 탐색하는 위치에 스크롤을 해놓으면 훨씬 편리하겠지요…?

   

   

   

여러 툴 윈도우에 검색 기능 제공

여러 툴 윈도우에 검색 기능이 강화가 되었습니다. 자칫 "모두 똑같은 검색 아니야?" 라고 하실 수 있겠지만, 각각 검색의 기능은 다르게 작동합니다. 예를 들면, TEAM EXPLORER인 경우 원하는 Work Item을 찾거나 SharePoint 문서를 찾는데 활용할 수 있고, SOLUTION EXPLORER에서는 파일의 내용이나 파일 이름으로 검색을 할 수 있겠지요.

다음은 툴 윈도우에서 제공하는 검색 기능들 입니다.

   

솔루션 탐색기 검색

   

단위 테스트 검색

   

팀 탐색기 검색

   

도구 상자 검색


Metro Style App 성능 및 품질 관리

Visual Studio 2005부터 최상위 버전에서 제공하는 기능 중에 하나가 바로 Profile 기능입니다. Visual Studio Profile 기능은 Performance, Memory, Thread 와 같이 눈으로 보거나 사람이 오감을 이용하여 측정할 수 없는 부분을 정교하게 측정할 수 있습니다. Metro Style App 도 이런 Performance 를 측정하고 Code Analysis 로 코드의 품질을 관리할 수 있게 되었네요.

   

Metro Style App을 Profile하기 위해서는 디버깅 상태를 Local Machine으로 변경을 해야 합니다. 그리고 Analyze 메뉴에서 Launch Performance Wizard 를 선택하여 단계별로 원하는 Profile 단계를 선택하면 됩니다. Visual Studio를 이용하여 .NET 응용 프로그램 Profile을 해보신 분이라면 편하신 대로 Profile Windows에서 시작하셔도 됩니다.

   

Metro Style App의 어떤 Performance를 측정할지 정하였다면 아래의 Profile 방법을 하나 선택하시면 됩니다. 다만, Metro Style App 의 Profile 을 몇 가지 제한이 있네요.

CPU Sampling 의 경우 C#, C++, JavaScript Metro Style App 모두 Profile이 가능합니다. 다만, Instrumentation의 계측 형태의 Profile은 JavaScript Metro Style App만 지원을 합니다. 물론 .NET 응용 프로그램인 경우 모든 Profile을 모두 지원해 줍니다.

   

CPU Sampling 을 할 Metro Style App을 선택하고, 쭉 쭉 다음 단계로 이동하면 바로 Profile 을 시작할 수 있습니다. CPU Sampling 을 하려는 응용 프로그램의 모든 기능을 동작시키면 됩니다. 만들어 놓은 기능을 선택도 해보고, 쿡쿡 클릭도 해보고 하신 후, Stop Profile을 클릭하여 성능 측정을 마무리 합니다.

   

그럼, Profile 보고서가 완성이 되면 CPU Sampling 결과를 보여줍니다. 아래와 같은 보고서는 의외로 성능 지표를 분석할 때 중요한 정보를 줍니다. 아래의 Inclusive, Exclusive 등 성능 지표 결과를 보시기 어려우시다면, 꼭 Visual Studio 2010 의 성능 프로파일 MSDN 문서를 확인해보세요.

꾸준히 성능 관리를 하여 샘플링을 떠 놓으면 나중에 얼마나 성능이 좋아지고, CPU 리소스를 덜 차지하는지 비교도 해보고 하시면 Visual Studio 의 막강한 기능에 대해 다시 한번 놀라실 겁니다.

   

Visual Studio Profile 에 대한 자세한 내용은 다음의 링크를 참고 하십시오.

http://msdn.microsoft.com/ko-kr/library/z9z62c29.aspx

   

   

Metro Style App의 Profile이 완료가 되면, 아래의 그림과 같이 성능 보고서를 보여줍니다. 상단의 영역은 CPU Sampling 결과를 그래프로 보여주며, 하단은 구간별로 CPU에 가장 많이 부하를 주는 구간을 리스트업 합니다.

   

CPU Sampling 결과를 다차원으로 분석하기 위해 Current View 영역에서 항목을 선택하시면 됩니다. 프로세스별로 분석하거나 모듈, 클래스, 메서드 등의 단위로 세밀하게 분석할 수 있는 지표를 제공해 줍니다.

   

덧붙여 Metro Style App의 Profile 기능은 Visual Studio가 설치된 환경 뿐만 아니라, Visual Studio 가 설치되지 않은 환경에서도 Profile 기능을 제공 합니다. 다음의 문서에서 자세한 내용을 확인해보세요.

http://msdn.microsoft.com/en-us/library/hh696636(v=vs.110).aspx

   

   

Metro Style App 의 코드 분석

Visual Studio의 Code Analysis를 효과적으로 사용하신 분이라면 좋아할 듯 합니다. Metro Style App에서도 Code Analysis기능을 그대로 적용할 수 있습니다. 개발 초기부터 Globalization, Performance를 염두 해두신다면 Code Analysis가 큰 도움이 될 겁니다.

   

Code Analysis에 대한 자세한 내용은 다음의 링크에서 확인하십시오.

[Better Code]Visual Studio 2010 Code Analysis Enhancements - 1.개요 http://vsts2010.net/39

[Better Code]Visual Studio 2010 Code Analysis Enhancements - 2. Rule Sets Feature http://vsts2010.net/41

   


Metro Style App 디버깅

C#이나 C++, VB.NET 으로 한번쯤 디버깅을 해본 분이라면 Metro Style App 디버깅도 같은 방식으로 디버깅이 가능합니다. 기존의 .NET 응용 프로그램 디버깅 방식과 별 차이가 없기 때문에, 디버깅 경험 그대로 사용하셔도 됩니다.

   

   

Simulator 로 디버깅

Visual Studio 11에서는 WinRT 디버깅 환경은 일반적으로 Local Machine 디버깅과 Simulator 디버깅, Remote Machine 디버깅이 있습니다. 그 중 Simulator 디버깅 부분의 디버깅 환경이 굉장히 잘 되어있네요. 마치 ARM 코어가 탑재된 테블릿을 조작하는 느낌까지 듭니다. Simulator 디버깅은 시스템이 부팅된 후 Windows 8 구동에서 사용자 로그인까지 그대로 재현이 됩니다.

아래의 그림과 같이 디버깅 툴바 영역에서 Simulator 디버깅을 선택하고 디버깅을 시작하면 Simulator 가 구동이 됩니다.

Simulator 디버깅에 대해 더 자세한 내용은 다음의 링크를 참고하십시오.
http://msdn.microsoft.com/en-us/library/hh441475(v=vs.110).aspx

   

   

Simulator를 선택한 후 디버깅을 시작하면 아래의 그림과 같이 테블릿을 연상케 하는 Simulator 창이 뜹니다. 필자의 집 네트워크 환경은 Active Directory로 묶여 도메인으로 관리를 하고 있는데, Simulator의 사용자 로그인도 마찬가지로 도메인 로그인 되는 것을 확인할 수 있습니다.


Simulator를 통해 WinRT 샘플이 잘 동작하는 것이 확인되는군요.

   

혹시나 싶어 Simulator 디버깅 중에 Metro 바탕 화면에서 데스크탑 바탕화면으로 이동해 보았습니다. 제 로컬 컴퓨터 환경이 그대로 재현이 되네요.

Simulator 우측 패널에 터치 방식을 선택하거나 해상도를 조절하거나 테블릿을 회전시키는 조작을 하는 아이콘들이 있습니다.

   


Metro Style App 배포

Metro Style App 템플릿을 사용하여 프로젝트를 생성하면 모든 형태의 Metro 응용 프로그램의 프로젝트에는 Package.appmanafest 파일이 존재합니다. 이 파일은 Windows Store 에 앱을 배포할 때 앱 정보를 가지고 있는 파일입니다.

자세한 Metro Style App 의 배포에 대한 내용은 다음의 링크를 참고하십시오.
http://msdn.microsoft.com/en-us/library/hh454036(v=vs.110).aspx  

   

   

Metro Style App 프로젝트의 속성 페이지로 이동하면 아래의 그림과 같이 속성 페이지로 이동합니다. 이곳에서 앱의 이름과 Rotaions 타입, 전경색과 배경색 및 Splash 이미지, 그리고 앱의 호환 정보, 장치 정보를 설정하면 됩니다.

   


지난 2012년 02월 29일, Windows 8 Consumer Preview 와 Visual Studio 11 Beta 버전이 공개가 되었습니다. 그 중 Windows 8 의 가장 큰 특징이라고 하면 WinRT(Windows Runtime)을 이용하여 Metro 응용 프로그램을 만들 수 있는 것이죠. 이전 Windows 7까지 Win32 API 를 이용하여 데스크탑 응용 프로그램을 만들었습니다만, Windows 8 에 와서는 이전 Win32 환경과 새로운 WinRT 환경에서 개발을 할 수 있습니다.

   

더 자세한 정보를 원하시면 다음의 MSDN 링크를 통해 확인하시기 바랍니다.

http://msdn.microsoft.com/en-us/library/bb386063(v=vs.110).aspx

   

쉽게 WinRT는 Metro Style App를 구동하기 위한 API 집합들이며, Win32의 Function APIs 가 아닌, 좀 더 세련되고 객체지향적으로 다듬은 차세대 윈도우 런타임이라고 생각하셔도 됩니다.

   

   

Visual Studio 11 은 Windows 8 의 Metro Style App 을 개발하기 위해 개발 템플릿을 지원해 줍니다. (프로젝트 템플릿 같은 그런 것들이죠). 그럼 Visual Studio 11 에서 제공하는 Metro Style App 의 템플릿은 어떤 것을 지원하는지 한번 볼까요?

   

분할 응용 프로그램

분할 응용 프로그램 템플릿은 사용자 지정하여 2열 보기에서 항목과 항목 세부 정보로 된 목록을 보기 위한 앱을 만들 수 있는 Metro 스타일 앱의 주요 기반이 됩니다. 이 보기에서 사용자는 항목 간에 빠르게 전환할 수 있으며 목록을 동적으로 업데이트할 수도 있습니다. 예를 들어 뉴스 읽기 프로그램, 스포츠 득점 앱, 전자 메일 앱 등이 있습니다. 이 프로젝트 템플릿은 Metro 스타일 앱에 권장되는 탐색 모델을 사용합니다.

표 형태 응용 프로그램

표 형태 응용 프로그램 템플릿을 사용하여 Metro 스타일 앱을 만드는 것이 좋습니다. 이 템플릿을 사용자 지정하여 사용자가 범주 검색을 통해 완전히 빠져드는 콘텐츠를 찾는 앱을 만들 수 있습니다. 예를 들면 쇼핑 앱, 뉴스 앱, 사진 또는 동영상 앱이 있습니다. 이 프로젝트 템플릿은 Metro 스타일 앱에 권장되는 탐색 모델을 사용합니다.

탐색 응용 프로그램

이 JavaScript 템플릿에는 기본 탐색, 앱 바탕 화면 도구 모음(앱 바) 및 표 형태 응용 프로그램과 분할 응용 프로그램 템플릿에서 사용되는 미디어 모드 기반 레이아웃이 제공됩니다. 탐색 템플릿에는 최소 페이지 조각 하나만 포함되어 있으며, 페이지 조각을 손쉽게 추가할 수 있습니다. 그런 다음 콘텐츠를 추가할 수 있습니다. 이 프로젝트 템플릿은 Metro 스타일 앱에 권장되는 탐색 모델을 사용합니다.

고정 레이아웃 응용 프로그램

이 JavaScript 템플릿은 콘텐츠가 고정 뷰포트에 맞게 되어 있다는 점을 제외하고 빈 응용 프로그램 템플릿과 동일한 최소한의 Metro 스타일 앱을 제공합니다. JavaScript에서 개발하는 대부분의 게임 앱에 이 프로젝트 템플릿을 권장합니다

DirectX 응용 프로그램

이 C++ 템플릿은 Metro 스타일 게임 개발에 사용할 수 있습니다.

   

Visual Studio 11 C# 언어에서 제공하는 Metro Style App 템플릿

   

Visual Studio 11 JavaScript 언어로 제공되는 Metro Style App 템플릿

특이하게도 JavaScript 언어로 제공되는 템플릿에만 고정 레이아웃(Fixed Layout) 템플릿을 지원하는군요.

   

Visual Studio 11 C++ 언어에서 제공하는 Metro Style App 템플릿

   

   

템플릿 샘플

각각 템플릿이 어떻게 구성되었는지 보기로 한 참에, 각 언어별로 제공되는 템플릿을 생성하여 Windows 8 에서 실행해 보았습니다.

   

JavaScript 템플릿으로 만든 Metro Style App Sample

   

   

C# 템플릿으로 만든 Metro Style App Sample

   

   

C++ 템플릿으로 만든 Metro Style App Sample

   


Visual Studio 11, 그 첫 만남

Visual Studio 2012 2012. 3. 5. 08:00 Posted by POWERUMC

2012년 02월 29일, MSDN Subscriber를 통해 Visual Studio 11 Beta 버전이 공개가 되었습니다. 이전 Visual Studio 11 Developer Preview 버전 이후 외관과 기능적인 면에서 상당히 많은 변화가 생겼습니다. 이쯤에서 다시 한번 느낀 것은 '과연 Visual Studio를 능가하는 IDE 도구가 나올까?'. Visual Studio는 개발 툴 뿐만 아니라, 개발 활동에 직간접, 내외적인 대부분의 요소까지 최고의 플랫폼 도구라는 것이 자명한 것 같습니다.
 

다음의 링크를 통해 Visual Studio 11 Beta 버전을 다운로드 받을 수 있습니다.
http://www.microsoft.com/visualstudio/11/ko-kr


Visual Studio 11 Beta 버전을 시작을 알리는 설치 스크린샷 부터 시작해 보기로 합시다.
 





Visual Studio 11, 프로젝트 호환성

Visual Studio 2012 2012. 3. 4. 08:00 Posted by POWERUMC

프로젝트 호환성

Visual Studio 11 에서 바로 와 닿는 편리함 중의 하나가 기존의 솔루션 파일과 프로젝트 파일을 어떤 변경 없이 그대로 열 수 있는 점입니다. 이전까지는 솔루션 파일의 구조와 프로젝트 파일의 일부 속성이 변경되어 새로운 개발 툴이 나올 때 마다 손이 갔었습니다. Visual Studio 가 해주는 자동 업그레이드를 그렇게 신뢰하지 않기 때문에 상위/하위 버전과 호환이 되도록 솔루션 파일과 프로젝트 파일을 변경했기 때문입니다. 과거에 Visual Studio 솔루션/프로젝트를 자동으로 업그레이드해 줄 경우 컴파일이 되지 않는 경우가 많았거든요.

   

   

이번 Visual Studio 11은 대부분의 솔루션/프로젝트의 구조를 변경 없이 그대로 상위 버전인 Visual Studio 11에서 사용할 수 있습니다. 재미있는 것은 예전에는 솔루션/프로젝트 업그레이드 마법사가 업그레이드를 진행하였는데, 이번 Visual Studio 11에서는 안전한 업그레이드인 경우 그냥 알아서 업그레이드하는 듯 합니다.

   

하지만, 모두 다 호환되는 것은 아닙니다. 우리가 평상시에 자주 쓰는 프로젝트 형식들은 아무 변경 없이 호환이 되지만, 일부 호환이 되지 않는 프로젝트 형식도 몇 가지 됩니다. 그리고 프로젝트 형식이 호환은 되지 않지만, 아주 사소한 변경이라면 Visual Studio 11이 그냥 알아서 업그레이드를 합니다. 여기에 대한 정보는 다음의 링크에서 확인할 수 있습니다. (

http://msdn.microsoft.com/en-us/library/hh266747(v=vs.110).aspx )

   

그 중에서 대표적으로 호환이 되지 않는 것들만 볼까요?

   

프로젝트 형식

  • Visual Studio 11 에서 열 수 없는 것들
    • Cloud tools
    • MSI setup (설치 프로젝트) - VS11 에서 없어졌지요.
    • Visual Studio Macro - VS11 에서 없어졌지요.
    • Windows Mobile - 프로젝트 형식이 없어졌지요.
    • Windows Phone - 프로젝트 형식이 없어졌지요.

   

   

  • Visual Studio 11 형식으로 업그레이드가 필요하고, 그 이후 Visual Studio 11 에서만 열리는 것들
    • F#
    • LightSwitch
    • Rich Internet Applications - 실버라이트를 의미하는 것일까요? ^^;
    • Visual Studio SDK/VSIX

         

         

  • 그 외 특수한 경우
    • Visual C++ 10.0 - 로컬 컴퓨터에 Visual Studio 2010과 Visual Studio 11 Beta 둘 다 설치되어 있어야 VC++ 10.0 프로젝트를 Visual Studio 11에서 열 수 있습니다.
    • Visual Studio 2010 Database (.dbproj) - 컨버전을 하면 열 수 있는데, 지원 안 되는 기능이 많네요. 꼭 문서 참고 하세요.

         

         

파일

  • BizTalk Flat file schemas - 파일을 추가 못함
  • Profile Reports File : 성능 프로파일 보고서 중 .vspx 파일만 열지 못함
  • Solution File : 솔루션 파일 중 .sou 파일이 있는데, 여기에 Break Point 등의 정보가 있는데 VS11 로 업그레이드 되고 나면 VS2010 에서 설정 정보를 잃어버릴 수 있다고 하네요.

Visual C++ 11 베타 출시!!!

Visual C++ 10 2012. 3. 3. 09:00 Posted by 알 수 없는 사용자

드디어 (미국 시간)2 29일에 Windows 8 Consumer Preview과 함께 Visual Studio 11 베타 버전이 나왔습니다.

저는 31일 새벽에 다운로드 받은 후 그날 저녁쯤에 설치를 했습니다.

일단 OS와 툴 둘 다 베타 버전이라서 편의성을 위해서 VirtualBox에 설치를 했습니다.

 

설치를 하면서 저는 C++ 프로그래머답게 Visual C++ 11(VC++11) 10에 비교해서 어떤 변화가 있는지 찾아 보았습니다.

 

결론부터 말하면 C++11 부분은 CPT 버전이 나왔을 때 보다는 좋아졌지만 아직은 살짝 아쉬운 부분이 있으며 전체적으로 VC++11 10에 비해서 많은 변화가 생겼습니다(다른 말로 말하면 공부할게 많아졌습니다^^;).

MSDN에 소개된 글을 보면 VC++11의 특징은 크게 4개로 나눌 수 있습니다.

 

 

 

C++11 지원 강화

STL

새롭게 추가된 STL 라이브러리

<atomic>, <chrono>, <condition_variable>, <filesystem>, <future>, <mutex>, <ratio>, <thread>

가장 눈에 띄는 것은 스레드 관련 라이브러리입니다.

 

 

컨테이너의 메모리 최적화

vector은 기존 16바이트에서 12바이트, map 16바이트에서 8바이트로 축소

 

 

모든 컨테이너에 Emplacement 함수 구현

 

 

 

코어 언어

range-based for-loop, override/final, 강한 형 타입 및 전방 선언 enums

VC++10에서 정말 많은 사랑을 받는 것 중의 하나가 auto라면 이번 VC++11에서는 range-based for-loop라고 생각합니다. 이것은 배열이나 컨테이너들을 사용할 때 편리한데 아래와 같이 사용할 수 있습니다.

 

int Numbers[3] = { 1, 2, 3 };

for( int &n : Numbers )

{

   std::cout << n << std::endl;

}

 

바로 for( int &n : Numbers ) 부분이 range-based for-loop 인데 보면 알 수 있듯이 편리와 안전 둘 다를 잡을 수 있습니다.

 

 

Variadic Templates

Variadic Templates은 가변 길이 인수 템플릿으로 현재는 올바르게 지원하는 것은 아닙니다. 현재는 매크로를 사용하여 임시적으로 구현되어 있습니다. 기본으로는 최대 5개까지 지원하고 _VARIADIC_MAX 라는 매크로의 값을 변경하면 최대 10개까지 늘릴 수 있습니다.

 

 

Stateless lambda

변수를 캡쳐하지 않는 람다 식은 함수 포인터로 변환할 수 있다 라는 사양이 C++ 11에 추가되었는데 이것을 MS에서는 Stateless lambda라고 부릅니다. 이것을 사용하면 Windows 프로시저의 콜백 함수에 람다 식을 사용할 수 있습니다.

 

 

 

WinRT 지원

Windows 8 개발과 관계가 있는 부분입니다.

Windows 8 Metro 스타일과 데스크 탑 스타일 두 개의 모드를 지원하는데 데스크 탑 모드는 현재 우리가 사용하고 있는 것과 동일한 것이고 Metro 스타일은 테블릿을 위한 모드입니다.

Metro에서 만드는 비 관리형 C++ 코드는 WinRT를 사용합니다.

UI XAML을 사용하고 C++ Component Extensions(C++/CX)을 사용하여 닷넷을 경계의 구분 없이 사용할 수 있습니다

VC++ 프로젝트 템플릿을 보면 WinRT와 관련된 것이 새로 많이 생겼습니다. 위 그림의 Direct2D Application이나 Direct3D Application은 모두 WinRT용입니다.

 

 

병렬 프로그래밍

새로운 병렬 알고리즘 추가 - parallel_sort, parallel_reduce, parallel_transform

 

새로운 병렬 컨테이너 추가 – priority_queue, map 등 추가

 

스케쥴러 기능 향상

 

C++ AMP – CUDA와 비슷한 GPU를 사용한 병렬 프로그래밍. DirectX 11 Direct Compute가 개량 되었다고 생각해도 좋을 것 같습니다.

 

 

 

향상된 IDE

코드 분석 기능 강화

 

더 똑똑해진 인텔리센스

 

네이티브 C++도 유닛테스트 지원

 

코드 커버리지 기능 지원

 

 

 

 

 

베타 버전이 나왔고 흥미로운 것들이 많아서 저는 조금씩 조금씩 VC++ 11의 새로운 부분을 공부해 나가려고 합니다. 이전처럼 공부한 것들을 여기에 정리해서 올릴 예정이니 관심 있는 분들은 같이 공부해 나가기 바랍니다^^

 

 

 

참고

What's New in Visual Studio 11 Beta for C++ Developers

http://blogs.msdn.com/b/vcblog/archive/2012/02/29/10272778.aspx

 

MSDN VC++11

http://msdn.microsoft.com/ko-kr/library/hh409293%28v=vs.110%29.aspx

 

 

Windows 8에서의 개발 개념

http://jacking.tistory.com/887

 

Windows Runtime(WinRT)에서 사용하는 C++ Component Extensions(C++/CX)?

http://jacking.tistory.com/888

[미리 보는 C++11] 8. Placement Insert

C++0x 2012. 2. 27. 09:00 Posted by 알 수 없는 사용자

Placement Insert C++11의 기능 중에 하나로 STL 컨테이너와 관계가 있습니다.

 

struct ITEM

{

ITEM( int nCode )

{

}

};

 

std::vector< ITEM > Items;

Items.push_back( ITEM( 1 ) );

 

현재까지는 위 코드처럼 ITEM이라는 객체를 Items 컨테이너에 생성과 동시에 추가를 할 때는 위와 같이해야 합니다. 그런데 위 방식으로 하면 추가를 위해 컨테이너에 한번 생성을 한 후 복사를 해야 하는 문제가 발생합니다(또 임시 객체 만들므로 삭제 비용도 발생합니다).

이와 같은 동작은 우리가 원하는 것이 아닙니다.

그래서 C++11에서는 이와 같은 문제를 해결했습니다. 바로 Placement Insert가 해결했습니다.

 

C++11‘Placement Insert’를 사용하면 위의 코드는 아래와 같이 할 수 있습니다.

std::vector< ITEM > Items;

Items.emplace_back( 1 );

 

emplace_back push_back과 같지만 Placement Insert 기능이 구현된 것으로 임시 오브젝트를 만들면서 발생하는 비용을 없애줍니다.

 

C++11의 각 컨테이너에는 Placement Insert와 관련된 멤버로
emplace(insert),
emplace_back(push_back),
emplace_front(push_front),
emplace_hint(insert.
연관 컨테이너 용)
가 추가됩니다.

 

Placement InsertC++11의 새로운 기능인 가변 인수 템플릿을 사용하여 구현되었습니다.

 

 

Placement Insert는 아래와 같은 주의할 점도 있습니다.

1. explicit 문제.

   explicit 생성자도 암묵적으로 호출됩니다.


2. "0" 문제.

생성자의 파라미터가 포인터인 경우 인자로 0을 넘기면 int로 추론합니다. 그래서 이 경우에는 nullptr을 사용해야 합니다.

 

Apache Hadoop On Windows

Cloud 2012. 2. 24. 08:30 Posted by 알 수 없는 사용자

Apache Hadoop On Windows

Apache Hadoop On Windows 에 대한 위키 페이지는 아래를 참고하십시오.

http://social.technet.microsoft.com/wiki/contents/articles/6204.hadoop-based-services-for-windows.aspx

제한된 CTP에 대한 내용은 아래 링크를 클릭해서 등록하시면 됩니다.

https://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=13697


여러 링크가 있어 Hadoop에 대한 내용을 살펴볼 수 있을 것 같습니다.

Getting Started with Hadoop-based Services for Windows

On-Premise Deployment of Hadoop-based Services for Windows

Windows Azure Deployment of Hadoop-based Services for Windows

Windows Azure Deployment of Hadoop-based Services on the Elastic Map Reduce (EMR) Portal

Windows Azure에 대한 내용은 얼른 구성을 해서 살펴보겠습니다.


SQL Azure 가격 변경 및 100MB 데이터베이스

Cloud 2012. 2. 20. 08:30 Posted by 알 수 없는 사용자


SQL Azure
가격 변경 (2012 2)


SQL Azure
의 경우 가격이 상당히 많이 인하되었습니다. 50% 가량 인하되었습니다.

또한 100MB 데이터베이스도 제공이 되어 테스트나 데모 등에 사용하면 비용 절감에 도움이 될 것 같습니다.


아래 링크를 참조하시면 보다 더 구체적인 가격 변경에 대한 내용을 알 수 있습니다.

http://blogs.msdn.com/b/windowsazure/archive/2012/02/14/announcing-reduced-pricing-on-sql-azure-and-new-100mb-database-option.aspx

GB

Previous Pricing

New Pricing

New Price/GB

Total % Decrease

5

$49.95

$25.99

$5.20

48%

10

$99.99

$45.99

$4.60

54%

25

$299.97

$75.99

$3.04

75%

50

$499.95*

$125.99

$2.52

75%

100

$499.95 *

$175.99

$1.76

65%

150

$499.95*

$225.99

$1.51

55%


현재까지는 Windows Azure Management Portal에서 데이터베이스 생성시 데이터베이스 선택에서 100MB 는 나오지 않았습니다.