'분류 전체보기'에 해당되는 글 653건

  1. 2013.08.08 [좋은글] 개처럼 삽니다.
  2. 2013.08.08 조엘온 소프트웨어 스터디 문서
  3. 2013.08.08 CLR 스터디 했던거
  4. 2013.08.08 [포트폴리오] WINRT(윈도우8) 멜론 App(2013.3~2013.8)
  5. 2013.08.05 숙면에 도움이 되는 자연의 소리등을 모은 사이트들
  6. 2013.07.23 [winrt] dispatcher의 활용
  7. 2013.07.19 [VS] Code Snippet의 활용
  8. 2013.07.11 [windows8] 셋팅 페이지 보이게 하기
  9. 2013.07.05 Window8 Phone APP Melon (Hugeflow 2012.09~ 2013.03) 2
  10. 2013.07.05 [Window 8] 기기 해상도와 DPI 값 얻어오기
  11. 2013.06.17 [win8] 윈8 앱 종료 이벤트
  12. 2013.05.07 the activation request failed with error 가 뜨면서 실행이 안될때
  13. 2013.03.15 [wp8] Navigation Back Back하기
  14. 2013.03.04 [WP8] List Reserve 거꾸로 정렬
  15. 2013.01.24 [wp8] 솔루션 configation을 이용해서 #if 문 활용법~
  16. 2012.12.10 [wp8] wp8에서 파일 읽고 쓰기
  17. 2012.12.06 [wp8] ViewModel에서 Applicaionbar를 변경해보자.
  18. 2012.10.25 XCode와 Eclipse에 적합한 Source Control?
  19. 2012.10.18 [wp8] Generic 형식 전역(global)에서 사용하기
  20. 2012.08.27 [silverlight] 버튼 더블클릭막기
  21. 2012.08.24 [Silverlight] 시티은행 WorkBench (2012.06~2012.09)
  22. 2012.06.05 2012년 6월 5일 비쥬얼 스튜디오 세팅
  23. 2012.06.01 [포트폴리오] WindowPhone7 App Mnet (Hugeflow 2012.3~2012.5)
  24. 2012.05.31 [포트폴리오] Hugeflow 2012.04~05 Surface 현대 Bluelink (2012 5월 부산 모터쇼 출품) 1
  25. 2012.05.18 디아블로 수도승 스킬 트리
  26. 2012.05.10 [surface] SurfaceInkCanvas 컨트롤에서 Brush Size 조절법
  27. 2012.05.10 [surface] ScatterViewItem Content내에서 Width,Height 바꾸기
  28. 2012.05.09 [wp7] 프로그램 종료 하고 싶을때
  29. 2012.05.04 [surface] 코드로 만든 Fade out Control 1
  30. 2012.04.27 [surface] ContentControl에서 ContentPresenter의 활용
세상사는 이야기2013. 8. 8. 14:49

회사 메일에서 좋은글을 보내줬는데 좋은거 같아 여기 남긴다.

 

 

 

개처럼 삽니다.

출처 《여덟단어》에서 글: 박웅현

 

인터뷰가 거의 끝나갈 즈음 마지막 질문이 날아옵니다.

“앞으로 계획은 어떻게 되십니까?

“없습니다. 개처럼 삽니다”라고 대답했습니다.

개는 밥을 먹으면서 어제의 공놀이를 후회하지 않고 잠을 자면서 내일의 꼬리치기를 걱정하지 않습니다.”라고 덧붙였다.

 

오랫동안 키운 개 이야기를 드리자면,

퇴근해서 집으로 돌아와 가장 먼저 하는 일은 가방을 내려놓고 안경과 모자를 벗고 침대에 눕는 것입니다. 제가 집에 들어오면 개는 반갑다고 5분 동안은 제 얼굴을 핥고 나서야 짓기를 멈췄기 때문이었는데요, 그 때 보면 핥는 일이 자신이 할 수 있는 유일한 일인 것처럼 최선을 다합니다.

그리고 밥을 주면 이 세상에서 밥을 처음 먹어보는 것처럼 먹고,

잠 잘 때 보면 ‘아….아까 주인이 왔을 때 꼬리쳤던 게 좀 아쉬운데 어쩌지?

그런 고민은 추호도 없어 보입니다. 그냥 잡니다. 공놀이를 할 때는 그 공이 우주입니다. 하나하나를 온전하게 즐기면서 집중합니다.

 

밀란 쿤테라는 『참을 수 없는 존재의 가벼움』에서 ‘개들은 원형의 시간을 살고 있다. 행복은 원형의 시간 속에 있다’는 말을 합니다.

 

맞습니다. 개들은 잘 때 죽은 듯 잡니다. 눈을 뜨면 해가 떠 있는 사실에 놀라고,

밥을 먹을 때에는 ‘세상에나~ 나에게 밥이 있다니!’ 하고 먹습니다.

산책을 나가면 온 세상을 가진 듯 뛰어 다니고 집에 돌아오면 다시 자죠.

그리고 다시 눈을 뜨죠. ‘우와! 해가 떠 있어!’ 다시 놀라는 겁니다.

그 원형의 시간 속에서 행복을 보는 것입니다.

 

순간에 집중하면서 사는 개…. ‘개처럼 살자’는

Seize the Moment, Carpe diem”의 제 식의 표현이며 제 삶의 목표입니다.

지금 내가 있는 이 순간에 최선을 다해 살라는 것이며 이 순간의 보배로움을 알아야 한다는 뜻입니다.

한형조의 『붓다의 치명적 농담』에 나오는 이야기입니다.

 

“스님도 도를 닦고 있습니까?

“닦고 있지.

“어떻게 하시는데요?

“배고프면 먹고, 피곤하면 잔다.

“에이, 그거야 아무나 하는 것 아닙니까?

도 닦는 게 그런 거라면 아무나 도를 닦고 있다고 하겠군요.

“그렇지 않아. 그들을 밥 먹을 때 밥은 안 먹고 이런 저런 잡생각을 하고 있고,

잠 잘 때 잠은 안자고 이런 저런 걱정에 시달리고 있지.

 

현재에 집중하라는 말입니다. 밥 먹을 때 걱정하지 말고 밥만 먹고,

잠 잘 때 계획 세우지 말고 잠만 자라는 이야기입니다. 이 삶의 지혜는 동서양을 막론하고 마찬가지 입니다

 

오스카 와일드의 『도리언 그레이의 초상』에서도 헨리 경이 도리언 그레이에게 “자네는 포도알을 입안에 넣고 으깨어 그 즙을 다 마신 게야”라고 말하는데요, 카르페 디엠을 가르친 겁니다.

 

순간을 포도알로 보고 이 순간을 이 포도알을 먹으면서 어제의 일을 걱정하고 있다면 단물만 빨아먹고 버리는 것이고, 집중을 하면 단물을 빨아 먹고, 껍질의 신맛을 보고, 씨앗의 씹히는 맛을 보면서 그 순간을 온전히 즐기는 겁니다.

 

마치 개들처럼…..

순간을 산다는 건 대단히 중요한 일입니다.

'세상사는 이야기' 카테고리의 다른 글

[여행] 홍콩 자유여행 3박4일 일정  (0) 2011.08.16
몬헌 여기 좋다~ 모든 공략~  (0) 2010.05.31
화장품 사기당하다 ㅠㅠ  (0) 2010.05.17
[잡담] cowon s9 와 s605  (0) 2009.11.16
이문제 풀어보자  (0) 2009.08.10
Posted by 동동(이재동)
세미나2013. 8. 8. 14:41

휴즈플로우에서 스터디 할때 세미나 했던 자료

 

조엘온 소프트웨어 발표 최종.ppt

 

Posted by 동동(이재동)
세미나2013. 8. 8. 14:39

 

아쉽다.. 스터디 예전에 많이 했었는데 포맷해서 자료가 많이 없다 그래도 있는거라도 올려야지

 

clr_study.docx

 

Posted by 동동(이재동)
포트폴리오2013. 8. 8. 14:29

멜론 윈도우폰 8 이 끝난후에 했던 WINRT (windows 8) APP 프로젝트 이다.

 

윈도우폰 하고 있다가 윈도우8 개발자가 회사를 그만둠으로써 내가 맡았던 프로젝트 이다.

 

버그가 많아서 고치는데 죽는줄 ㅠㅠ

 

LTE 단말 대응이라든지 추가 UI및 기획 변경사항 버그 수정을 하느라 시간이 조금 걸렸던 프로젝트이다.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 동동(이재동)
좋은사이트2013. 8. 5. 16:00

컴퓨터를 켜놓고 자는데


어짜피 잘꺼 자연의 소리와 아로마 테라피를 이용해서 숙면을 취해볼려고 한다.


일단 아로마 테라피는 예전에 사놓은걸 쓰고..


음악을 이용해서 오늘 한번 해봐야겠다.


http://www.rainymood.com/


빗소리만 들을수도 있고 추천음악과 함께 들을수 있다.


http://blog.naver.com/kmymedia/

소리 풍경 네이버 블러그


http://blog.daum.net/kmymedia

소리풍경 다음 블러그




'좋은사이트' 카테고리의 다른 글

[util] 개발자 필수 툴  (0) 2010.02.03
[site] 개발자 커뮤니티 새로운것?  (0) 2009.10.21
원격제어 사이트 http://www.nqvm.com/  (0) 2009.08.10
Posted by 동동(이재동)
Windows8 App2013. 7. 23. 13:16

com error나 thread error가 나는걸 보니 분명히 dispatcher 를 쓰면 될꺼 같은데 라는 생각이 들었다.

 

networkchanged이벤트를 받아서 인터넷이 끊겼을때 ui를 변경 시켜야하는건데

 

networkchanged이벤트를 app.xaml에서 주는걸 그대로 쓰지말고 해당 xaml.cs에 한번더 이벤트를 건후

 

Windows.Networking.Connectivity.NetworkInformation.NetworkStatusChanged += delegate { DownloadNetworkState(); };
 
        private async void DownloadNetworkState()
        {
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {                
                MelonAppBar.SetDownloadToogleButtonContent();
            });
        }

 

 

이렇게 dispatcher를 이용했다…

 

근데 Windows.current.dispatcher는 쓰임이 다르니 다를때 사용할것(이것때문에 삽질 했다는 ㅠㅠ)

Posted by 동동(이재동)
VisualStudio2013. 7. 19. 11:09

대부분 개발자들은 자기만의 Snippet이 있거나 회사에서 제공을 해준다.

 

일단 만드는 방법은 간단하다…

 

비쥬얼스튜디오에서 하는방법으로 설명하자면

 

xml 파일로 확장자를 .snippet으로 바꾼후 저장한다.

 

그뒤 xml에서 오른쪽 버튼을 눌러서 snippet을 누르면 알아서 나온다.

 

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippet Format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <Header>
    <Title>Propert</Title>
    <Author>DongDong</Author>
    <Shortcut>pp</Shortcut>
    <Description>설명</Description>
    <SnippetTypes>
      <SnippetType>SurroundsWith</SnippetType>
      <SnippetType>Expansion</SnippetType>
    </SnippetTypes>
  </Header>
  <Snippet>
    <Declarations>
      <Literal>
        <ID>property</ID>
        <ToolTip>Property name</ToolTip>
        <Default>Value</Default>
      </Literal>
 
      <Literal>
        <ID>defaultValue</ID>
        <ToolTip>The default value for this property.</ToolTip>
        <Default>value</Default>
      </Literal>
 
      <Literal>
        <ID>type</ID>
        <ToolTip>type</ToolTip>
        <Default>string</Default>
      </Literal>
    </Declarations>
    <Code Language="csharp">
      <![CDATA[
      /// <summary>
      /// Property to set a $property$
      /// </summary>
 
      private $type$ _$defaultValue$;
      public $type$ $property$
      {
                    get
                    {
                        return _$defaultValue$;
                    }
 
                    set
                    {
                        _$defaultValue$ = value;
                    }
      }
   $end$]]>
    </Code>
  </Snippet>
</CodeSnippet>

 

이건 내가샘플로 만든 property snippet이다.

 

<Code Language="csharp">

는 C#으로 해야하며

 

<Literal>
      <ID>property</ID>
      <ToolTip>Property name</ToolTip>
      <Default>Value</Default>
    </Literal>

 

이부분을 통해서 변수를 설정할수 있다.

 

XAML에서도 되는데 이건

 

xaml code snippet 추가 기능을 다운받아서 설치해야한다.

 

자세한 설명
http://timheuer.com/blog/archive/2013/07/08/xaml-code-snippets-for-visual-studio.aspx

 

변수 첫글자를 소문자로 만들어서 편리하게 하고 싶었지만

 

현재 vs에서 지원해주는 formatting 기능이 3가지밖에 없어서

 

GenerateSwitchCases

ClassName()

SimpleTypeName( TypeName )

 

아쉽게도  못한다. ㅠㅠ

 

자세한 설명과 포맷팅에 대해서 msdn엔 외에 여기서 설명되어있다.

 

http://www.codeproject.com/Articles/42077/Code-Snippet-Step-by-Step-Guideline-from-Creation

Posted by 동동(이재동)
Windows8 App2013. 7. 11. 16:29

 

설정페이지를 커스터마이징하는건 구글에 많았지만 순수 오리지널을 보이게 하는부분은 없었다.

 

간단하다.

 

SettingsPane.Show();

 

셋팅하는건 여기를 참조

 

http://cyanbyfuchsia.wordpress.com/2013/04/29/winrt-settings-with-caliburn-micro/

 

혹은 winrt flyout으로 검색하면 된다.

'Windows8 App' 카테고리의 다른 글

TextBlock에서 라인 띄우는 법  (0) 2013.11.22
T Generic 리턴하기  (0) 2013.10.15
[winrt] dispatcher의 활용  (0) 2013.07.23
[Window 8] 기기 해상도와 DPI 값 얻어오기  (0) 2013.07.05
[win8] 윈8 앱 종료 이벤트  (0) 2013.06.17
Posted by 동동(이재동)
포트폴리오2013. 7. 5. 11:56

Windows8 폰이 출시 됨에 따라서 멜론 앱을 만들었다.

 

기본적인 mvvm, ninject 패턴을 이용하였고 .netframework 4.5를 지원해서 Task, Async,await 을 이용해서 쉽게 개발가능 하였다.

 

하지만 mnet에 비해 너무 많은 기능을 지원해서 프로그램도 조금 무겁고 페이지도 많고 개발하기가 쉽지는 않았다.

 

서버와의 연동도 윈폰용은 따로 api를 빼야해서 서버팀과 같이 작업하다보니 시간이 조금더 걸렸던거 같다.

 

멜론쪽 QA 테스트도 엄청 까다로워서 힘들었던 기억이 난다.

 

하지만 아쉽게도 모두다 개발이 완료 되었지만 국내에 윈8폰이 출시를 안해서 앱스토어에 올리지 못한 불운의 앱이 되어버렸다 ㅠㅠ

 


 




















 

 

 

 

Posted by 동동(이재동)
Windows8 App2013. 7. 5. 11:23

 

 

void detectScreenType()
 {
     double dpi = DisplayProperties.LogicalDpi;
     var bounds = Window.Current.Bounds;
     double h;
     switch (ApplicationView.Value)
     {
         case ApplicationViewState.Filled:
             h = bounds.Height;
             break;
 
         case ApplicationViewState.FullScreenLandscape:
             h = bounds.Height;
             break;
 
         case ApplicationViewState.Snapped:
             h = bounds.Height;
             break;
 
         case ApplicationViewState.FullScreenPortrait:
             h = bounds.Width;
             break;
 
         default:
             return;
     }
     double inches = h / dpi ;
     string screenType = "Slate";
     if (inches < 10)
     {
         screenType = "Slate";
     } else if (inches < 14) {
         screenType = "WorkHorsePC";
     }
     else 
     {
         screenType = "FamilyHub";
     }
     ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
     localSettings.Values["screenType"] = screenType;
 }

 

머 거창해 보이지만 실제로는

 

var bounds = Window.Current.Bounds;

 

이렇게만 얻어오면 된다.

 

참조 : http://stackoverflow.com/questions/10828179/how-to-get-the-resolution-of-screen-for-a-winrt-app

'Windows8 App' 카테고리의 다른 글

TextBlock에서 라인 띄우는 법  (0) 2013.11.22
T Generic 리턴하기  (0) 2013.10.15
[winrt] dispatcher의 활용  (0) 2013.07.23
[windows8] 셋팅 페이지 보이게 하기  (0) 2013.07.11
[win8] 윈8 앱 종료 이벤트  (0) 2013.06.17
Posted by 동동(이재동)
Windows8 App2013. 6. 17. 18:03

 

종료  이벤트

 

      Application.Current.Suspending += Current_Suspending;
        }

        private void Current_Suspending(object sender, SuspendingEventArgs e)
        {
            //Debug.WriteLine("종료!");
            TileManager.StopTileUpdate();
        }

 

http://stackoverflow.com/questions/16264435/windows-store-app-metro-on-closed-suspend-event-does-not-work

Posted by 동동(이재동)
Windows Phone 82013. 5. 7. 16:58

솔루션 익스플로러에서 show all file 아이콘을 누른후 bin과 ob 의 debug폴더를 삭제후 다시 빌드 하면 해결된다.




참고 : http://michaelcrump.net/resolution-unable-to-activate-windows-store-app-the-activation-request-failed-with-error-e-fail

Posted by 동동(이재동)
Windows Phone 82013. 3. 15. 12:10

navigation 에서는 goback을 두번해야 할떄가 있다…

 

여러가지 방법이 있겠지만 효율적인 방법을 소개~

 

바로 stack 에 있는 엔트리를 remove해서 back 하는 방법이다.

 

public class NavigationHelper
    {
        public static PhoneApplicationFrame RootFrame
        {
            get
            {
                if (App.Current.RootVisual is PhoneApplicationFrame)
                {
                    return App.Current.RootVisual as PhoneApplicationFrame;
                }
 
                return null;
            }
        }
 
        public static void Navigate(string url)
        {
            if (GlobalStates.Instance.IsLogging)
                return;
 
            if (url.Contains("http://"))
            {
                var asy = Launcher.LaunchUriAsync(new Uri(url, UriKind.Absolute));
            }
            else
            {
                RootFrame.Tag = null;
                RootFrame.Navigate(new Uri(url, UriKind.RelativeOrAbsolute));
            }
        }
 
        public static void Navigate(string url, object parameter)
        {
            RootFrame.Tag = parameter;
            RootFrame.Navigate(new Uri(url, UriKind.RelativeOrAbsolute));
        }
 
        public static void GoBack()
        {
            if (RootFrame.CanGoBack != false)
            {
                try
                {
                    RootFrame.Dispatcher.BeginInvoke(() =>
                    {
                        RootFrame.GoBack();
                    });
                }
                catch
                { }
            }
            else
            {
                if (RootFrame.CanGoForward)
                {
                    RootFrame.Navigate(new Uri("/Views/HubPages/HubPage.xaml", UriKind.RelativeOrAbsolute));
                }
                System.Diagnostics.Debug.Assert(false);
            }
        }
 
        public static int BackEntryCount()
        {
            return RootFrame.BackStack.Count();
        }
 
        public static void RemoveBackEntryLatest()
        {
            if (RootFrame.CanGoBack != false)
            {
                RootFrame.RemoveBackEntry();
            }
        }
 
        public static void RemoveBackEntry(int removeCount)
        {
            for (int i = 0; i < removeCount; i++)
            {
                if (RootFrame.CanGoBack == false)
                {
                    goto finalizing;
                }
 
                RemoveBackEntryLatest();
            }
 
        finalizing:
 
            return;
        }
 
        public static void RemoveBackEntryAll()
        {
            RemoveBackEntry(RootFrame.BackStack.Count());
        }
 
        public static void DumpBackEntryAll()
        {
#if DEBUG
            int i = 0;
 
            foreach (JournalEntry entry in RootFrame.BackStack)
            {
                if (entry == null)
                {
                    continue;
                }
 
                LogHelper.Debug("BackStack: entry[{0}]={1}", i, entry.Source);
 
                i++;
            }
#endif
        }
 
        public static void GoHome()
        {
            RootFrame.Navigate(new Uri("/Views/HubPages/HubPage.xaml", UriKind.RelativeOrAbsolute));
 
            //if (RootFrame.CanGoBack)
            //{
            //    NavigatedEventHandler handler = null;
            //    handler = delegate
            //    {
            //        RootFrame.Navigated -= handler;
            //        GoHome();
            //    };
            //    RootFrame.Navigated += handler;
            //    RootFrame.GoBack();
            //}
            //else if (RootFrame.CurrentSource.OriginalString.Contains("/HubPage.xaml") == false)
            //{
            //    RootFrame.Navigate(new Uri("/Views/HubPages/HubPage.xaml", UriKind.RelativeOrAbsolute));
            //}
        }
 
        internal static void GoToLogin()
        {
            NavigationHelper.Navigate(PageUrls.Login);
        }
    }

 

이건 navigationHelper class이고

 

실제는

NavigationHelper.RemoveBackEntryLatest();
             NavigationHelper.GoBack();

 

이렇게 사용하면 된다.

Posted by 동동(이재동)
Windows Phone 82013. 3. 4. 13:41

 

List 에 1,2,3 이 있으면 3,2,1 로 불러오고 싶을떄

 

List의 Reserve() 메소드를 이용한다.

 

하지만 옵저버블 컬렉션에서는 안되지만 방법이 있을듯하다.

 

 

 

참고 : http://msdn.microsoft.com/ko-kr/library/b0axc2h2(v=vs.85).aspx

Posted by 동동(이재동)
VisualStudio2013. 1. 24. 15:16

Debug일때와 Release일경우는

 

#if DEBUG

 

#else

 

#endif

 

이런식으로 자주 쓴다

 

하지만 그외에 몇개를 더 만들고 싶다면

 

image

 

image

 

이런식으로 만든후

 

솔루션 익스플로러에서 해당 프로젝트 Property Page를 연다(솔루션 속성을 여는게 아니라 프로젝트 속성을 열어야 함)

 

그뒤 Build-Conditional compliation symbos뒤에 ;이름을 추가한다.(;MAPP) 대문자가 좋음

 

그뒤에 #if MAPP 를 써보자~ ㅎㅎ

Posted by 동동(이재동)
Windows Phone 82012. 12. 10. 12:35

 

일단 저장부터 ㅋ

private async Task FileSave(MemoryStream stream)
     {
         IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
         IStorageFile storageFile = await applicationFolder.CreateFileAsync(Const.LocalPlaylistFileName, CreationCollisionOption.ReplaceExisting);
         using (Stream fileStream = await storageFile.OpenStreamForWriteAsync())
         {                
             stream.Seek(0, SeekOrigin.Begin);
             await stream.CopyToAsync(fileStream);
             await fileStream.FlushAsync();
             stream.Dispose();
         }

 

로드하는부분

public async Task LoadAlbums()
       {
         
           IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
 
           IStorageFile storageFile = await applicationFolder.GetFileAsync(Const.LocalPlaylistFileName);
 
           IRandomAccessStream accessStream = await storageFile.OpenReadAsync();
 
           using (Stream stream = accessStream.AsStreamForRead((int)accessStream.Size))
           {
               var o = _serializer.ReadObject(stream);
               LocalPlaylist = o as ObservableCollection<LocalMyAlbum>;
           }
       }

 

일단 윈7이랑 조금 달라졌다.

 

참조한곳이랑은 약간 다르게 구현~

 

참고한곳 : http://dotnetapp.com/blog/2012/08/02/windows-phone-8-shared-core-with-windows-8-file-io/

Posted by 동동(이재동)
Windows Phone 82012. 12. 6. 16:25

일단 내가 하고자 하는것은 멜론 플레이 리스트에 수정모드와 일반모드가 있다.

 

일반모드에서 ApplicationBar에 편집 버튼을 누르면 ApplicationBar에 편집을 위한 다른 버튼이 생기게 하는게 목표다(삭제라든지)

 

일단 behind에서 하면 아주 쉽지만 ViewModel에서 하는방법은 없을까?.. 모르겠다..

 

그래성 생각한 방법이 IsReorderEnabled 란 프로퍼티를 만들고

 

 

 

private bool _isReorderEnabled;
 
       public bool IsReorderEnabled
       {
           get
           {
               return _isReorderEnabled;
           }
           set
           {
               Set<bool>(ref _isReorderEnabled, value); 
           }
       }       

 

그냥 View Behind코드에서 변경되었을때 이벤트를 걸었다.

 

public partial class PlaylistDetailView : PhoneApplicationPage
    {
        public PlaylistDetailView()
        {
            InitializeComponent();
            this.Loaded += PlaylistDetailView_Loaded;
        }
 
        private void PlaylistDetailView_Loaded(object sender, RoutedEventArgs e)
        {         
            (DataContext as PlaylistDetailViewModel).PropertyChanged += PlaylistDetailView_PropertyChanged;
        }
 
        void PlaylistDetailView_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "IsReorderEnabled")
            {
                if ((DataContext as PlaylistDetailViewModel).IsReorderEnabled == true)
                {
                    ApplicationBar = Application.Current.Resources["PlayListDetailEditAppBar"] as ApplicationBar;
                }
                else
                {
                    ApplicationBar = Application.Current.Resources["PlayListDetailAppBar"] as ApplicationBar;
                }
            }
        }
    }

 

머 이런방법도 있다 ㅋㅋ

Posted by 동동(이재동)
언어2012. 10. 25. 10:51

.NET 쪽이야 워낙 TFS가 독보적이라 말할 필요가 없지만

 

예전 아이폰 개발할때는 Xcode 소스관리를 어떻게 해야 했었는지 고민을 많이 했었다.

 

맥에서도 TFS를 사용할수 있나 싶어서 조사도 해봤지만  결국 그냥 일반적으로 쓰는 SVN을 사용하기로 하고

 

툴도 제일 윈도우에서 쓴거와 같은 툴을 구해서 쓴 기억이 난다.

 

현재 내가 알고 있는 소스관리는 CVS,SVN,GIT 정도 인데

 

CVS야 이제 거의 안쓰니 설명할 필요가 없을꺼 같고

 

SVN은 정말 보편적으로 많은 사람들이 쓰는것이라 Xcode,이클립스에서 완벽 지원하며

 

Tool도 Mac용,Windows용으로 정말 많다

 

대부분의 개발자가 사용가능하며 단일 프로젝트 관리하기 좋음

 

커밋하면 중앙 저장소에 바로 저장

 

단점은 서버를 설치해야함,여러사람이랑 작업시 가끔 머지가 두려움

 

GIT는


개개인의 로컬 저장소가 있어서 커밋을 하면 로컬 저장소에 저장이 된 후 push를 해야 중앙 저장소에 저장이 됨, 때문에 중앙

 

저장소에 의존적이지 않음

 

핵심은 로컬 저장 관리!! 그래서 일단 로컬에 저장하고 서버에 push하는 형태

 

GIT가 좀더 많은 기능을 지원하지만 이클립스 플러그인에서 불안하다고함

 

하지만 대세가 GIT이고 명령어 모드에 익숙해지면 GIT가 잇점이 많다고 생각함

 

물론 서버가 있어야함

 

GitHub와 google code 는 오픈소스라 프로그래밍계의 소셜이라 생각하는데 회사프로젝트면 사용 안하는게 좋다고 생각


물론 서버는 필요 없음

 

결론은 무난하고 여러사람이 같이 개발하는것이 아니라면 svn이 낫고

 

대새를 따르거나 여러사람이 함께 작업하고 여러가지기능을 사용하는것이라면 git가 낫다고 생각

 

나중에 GIT는 꼭 써봐야겠다는 생각이 들었다.

Posted by 동동(이재동)
Windows Phone 82012. 10. 18. 11:18

원래 Generic 형식은 Global에서 사용이 되지 않았다.

 

하지만 .net framework 4.0 이상부터는 dynamic 을 지원한다. ㅋㅋ

 

윈폰7에서는 Compact net framework 라 안되었지만 windows 8 phone은 강력해졌다.

 

예를 들어 이렇게 Webclient 에서 Json Data를 받으면 알려주는 제네릭 Event Handler를 만들었다고 하자

 

public class CompleteEvent<T>
   {
       public event EventHandler<JsonDataEventArgs<T>> completeEvent;
 
       public void JsonDataEvent(T jsonData)
       {
           EventHandler<JsonDataEventArgs<T>> temp = completeEvent;
           if (temp != null)
           {
               temp(this, new JsonDataEventArgs<T>(jsonData));
           }
       }
   }
 
   public class JsonDataEventArgs<T> : EventArgs
   {
       T _jsonDataDict;
 
       public JsonDataEventArgs(T data)
       {
           _jsonDataDict = data;
       }
 
       public T XmlData
       {
           get
           {
               return _jsonDataDict;
           }
           set
           {
               _jsonDataDict = value;
           }
       }
   }

 

이제 이것을 전역변수로 정의 해보자

 

api.cs에

 

public CompleteEvent<dynamic> ce = new CompleteEvent<dynamic>();

 

이렇게 되면 이 클래스의 CompleteEvent를 어디서든 사용할 수가 있다 CompleteEvent<T>형식으로는 전역변수를 사용할수가 없다

Posted by 동동(이재동)
silverlight2012. 8. 27. 12:48

더블클릭시 클릭 이벤트가 2번 일어나기때문에

 

시간차를 줘서 이벤트가 2번 일어나지 않도록 변경

 

더블클릭해도 두번째 클릭은 return 되기때문에 한번 클릭한 효과과 동일한 효과를 낸다.

 

       System.Windows.Threading.DispatcherTimer timer;
        bool singleClick = false;

 

        /// <summary>
        /// 로드 이벤트
        /// </summary>
        private void CIFControl_Loaded(object sender, RoutedEventArgs e)
        {
            timer = new System.Windows.Threading.DispatcherTimer();
            timer.Interval = TimeSpan.FromMilliseconds(500);
            timer.Tick += new EventHandler(timer_Tick);

         }

        void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            singleClick = false; // expires
        }
       

private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            if (!singleClick)
            {
                timer.Start();
                singleClick = true;
                Debug.WriteLine("Click");
            }
            else
            {
                Debug.WriteLine("Double Click");
                return;
            }

      }

'silverlight' 카테고리의 다른 글

심플한 MVVM 패턴 스타일 ~  (0) 2010.05.19
[silverlight] silverlight 3 정식버전 설명 정리한거  (0) 2009.07.13
졸작때 쓴 파일들  (0) 2008.12.18
내 졸작 제출용 파일  (0) 2008.10.29
silverlight rc1 정식버전  (0) 2008.10.15
Posted by 동동(이재동)
포트폴리오2012. 8. 24. 13:56

인천 예술회관역 시티은행에서 한 프로젝트


고객용 WorkBench와 직원용 WorkBench가 있으며 둘다 실버라이트로 개발 되었다.


고객용은 좀더 UI좀이 화려하고 그렇다. 


짧은 기간동안 업무적으로도 많이 알아야하고 은행업무라 ㅠㅠ


실수도 용납하지 않기때문에 철저하게 테스트해야 한다.


기존 A+통장만 있던 프로그램에서 수수료 제로통장을 추가하였으며 로직은 a+ 와 비슷하게 구현을 하였다.


세세한 수정도 있었고 직원용 고객용 2가지 프로그램을 동시에 분석해야하고 완벽히 이해해야 가능한 프로젝트이기


때문에 기술적인 요소보다 코레일 처럼 업무적인 프로세스가 더 중요한 프로젝트 였다.


그리고 은행업무라 인천 까지 가서 내부망으로 해야하는것이라 혼자 가서 밥도 혼자먹고 약간 쓸쓸한 프로젝트였기도 하다.


하지만 깔끔히 마무리 되어서  다행이다. 


 

 

 

Posted by 동동(이재동)
VisualStudio2012. 6. 5. 14:52

시티은행에 파견와서 새로 설치해야함

Exported-2012-06-05.vssettings

Posted by 동동(이재동)
포트폴리오2012. 6. 1. 16:58

코레일처럼 혼자 작업한게 아닌 회사 대표형과 Mnet 개발자분 디자이너 이렇게 만든 어플리케이션입니다.

 

초반에 내가 다하는걸로 계획되어 있었는데 코레일 유지보수 계약건으로 프레임워크는 대표형이 하고 그뒤로는 같이 공동으로 제작한 앱입니다.

 

각종 스트리밍 서비스가 가능하며 Mnet서버와는 웹서비스를 통해 통신하고 Json으로 파싱하는 작업을 하는등 여러가지 작업이 들어갔습니다. 대표형의 엄청난 프레임워크로 인해 손쉽게(?) 개발할수 있었습니다. 노가다 API도 직접 다 만드심 ㅋㅋ

 

Mnet개발자분도 실력이 출중하셔셔 두 고급개발자들과 함께할수 있었던 그런 프로젝트였던거 같습니다.

 

초반 기술검증이 필요해서 두려움에 떨었는데 의외로 윈폰7 스트리밍 서비스가 쉬워서 금방 했던거 같습니다

 

그외 UI 작업 아이폰처럼 곡 정렬이라든지(없어서 외부 라이브러리를^^) 여러가지 아이폰에는 당연히 포함되어 있는 컨트롤이지만 윈폰에는 첨부터 만들어야 하는게 조금 있어서 적용한다고 약간 고생하였고

 

FortuneCoin이후로 완벽 MVVM과 Ninject 를 많이 써본 프로젝트였던거 같습니다. 소스분석이 조금 어려웠다는 ㅠㅠ

 

앱이 올라갔을때 회식도 있어서 굿!!! 코레일은 그런거 없어서 아쉽 ㅠㅠ 고생은 젤 많이 했는데

 

Mnet 앱 URL: http://www.mnet.com/mnet/mobile/WinPhoneApp.asp

마켓플레이스 URL: http://www.windowsphone.com/ko-KR/apps/f278de3c-fa89-4465-a1ab-7f0703052deb

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 동동(이재동)
포트폴리오2012. 5. 31. 17:33

로봇캅 폴리 이후 맡은 프로젝트로써 2012년 부산 모터쇼에서 실제 surface에서 사용한 프로그램 입니다.

 

전체적인 PM은 이길복 이사님이 하셧고 저는 안에 InkCanvas (Pallete Control)과 SMS 키보드 , Email 키보드 컨트롤을 제작

 

과 팔렛트 모드일시 사진의 크기가 최대로 커지면서 수정가능하고 스탬프도 사용할수 있으며 가장자리에서 팔렛트 이동시에 오

 

른쪽 팔렛트 버튼이 보이도록 위치 수정등 여러가지 작업을 하였습니다.

 

부산 모터쇼 에서 실제 가서 여러사람들이 제가 참여한 프로젝트 프로그램을 만지는 것을 보며 좋아하니 뿌듯한 마음이~

 

부산 모터쇼 동영상은 나중에 링크로~

 

 

 

 

 

Posted by 동동(이재동)
기타2012. 5. 18. 15:22

링크로 대신


http://blog.naver.com/neocannon08?Redirect=Log&logNo=130138288950

Posted by 동동(이재동)
Surface2012. 5. 10. 17:47

사용자가 터치하는 Brush 크기를 조절하고 싶어서

SurfaceInkCanvasContainer.DefaultDrawingAttributes.Height = 7;
SurfaceInkCanvasContainer.DefaultDrawingAttributes.Width = 7;

이렇게 height,width값을 조정하였지만 적용이 되지 않았다.

문제는

SurfaceInkCanvasContainer.UsesTouchShape = false;

이것이 true로 되어 있어서였다.(기본이 True)

이걸 false로 하면 유저의 손가락 크기에 굵기가 달라지는게 아니라 일정하게 유지되도록 변경된다.

Posted by 동동(이재동)
Surface2012. 5. 10. 11:05

우왕 이것때문에 삽질 많이 했다.

일단 내가 하고 싶었던건 ScatterViewItem내 컨트롤에서 버튼을 누르면 MaxWidth,MaxHeight로 변경하고 싶었다.

근데 이상하게 Content내에서 사이즈를 변경하면 외부 ScatterViewitem 크기는 변경되지 않고 내부의 Content만 크기가 커졌다. 그래서 그냥 확대되는 느낌? 사이즈는 그대로 두고..

그래서 Scale로 어떻게든 해볼려고 했지만 역시 리사이즈할때도 문제이고 근본적인 원인이 해결되지 않아서

길복이 형한테 물어봤더니 길복이형이 이미 구현해 놓은 코드가 있었다.

 

if (Owner != null)
           {
               var container = Owner.GetContainer(this);
               if (container != null)
               {
                   container.Width = this.MaxWidth;
                   container.Height = this.MaxHeight;
               }
           }

 

대충 이런코드다 Owner라는게 있어서 Container를 잡을수가 있다!!!!!

최고다… 이걸 몰랐으면 엄청 고생했을듯

Posted by 동동(이재동)
Windows Phone 72012. 5. 9. 16:20

내가 알고 있는 방법은 2가지이다.

1. exception을 발생해서 종료하는방법으로 추천하지 않는다.

2. backStack을 모두 제거해서 종료하는 방법

이방법일경우는 네비게이션으로 어디든지 돌아다니다가 백백으로 오기 힘든경우 막 꼬이고 이런경우 특히 코레일 같은!!!

때 유용하다. 메인 페이지에 이 코드를 삽입하였다. 그래서 어디서든 메인페이지에서 back을 누르면 종료가 된다.

 

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
       {
           if (NavigationService.CanGoBack)
           {
               while (NavigationService.RemoveBackEntry() != null)
               {
                   NavigationService.RemoveBackEntry();
               }
           }
           base.OnNavigatedTo(e);
       }

참고 : http://stackoverflow.com/questions/5473972/how-to-exit-from-the-application-in-windows-phone-7

Posted by 동동(이재동)
Surface2012. 5. 4. 12:00

Xaml이 아닌 코드로 만들어서 범용적이고 실용적으로 사용 가능

public static class FadeAnimationControl
{
    public static void Fade(UIElement target, double ValueFrom, double ValueTo, double Duration)
    {
        DoubleAnimation da = new DoubleAnimation();
        da.From = ValueFrom;
        da.To = ValueTo;
        da.Duration = TimeSpan.FromSeconds(Duration);
        da.AutoReverse = false;

        System.Windows.Media.Animation.Storyboard.SetTargetProperty(da, new PropertyPath("Opacity"));

        System.Windows.Media.Animation.Storyboard.SetTarget(da, target);

        System.Windows.Media.Animation.Storyboard sb = new System.Windows.Media.Animation.Storyboard();
        sb.Children.Add(da);

        EventHandler eh = null;
        eh = (s, args) =>
        {
            //target.Visibility = Visibility.Collapsed;
            sb.Stop();
            sb.Completed -= eh;
            target.Opacity = ValueTo;
        };
        sb.Completed += eh;

        sb.Begin();
    }
}

참고 : http://forums.create.msdn.com/forums/p/87462/525024.aspx

Posted by 동동(이재동)
Surface2012. 4. 27. 10:40

일반적으로 Button(ContentControl 상속)과 같이 Content를 넣으면 이를 표현해주는데 Text를 넣으면 Text를 이미지를 넣으면 Image를 이런식으로 알아서 표현해준다.

이를 구현하기 위해서

ContentControl을 상속받은 컨트롤을 하나 만들고

 public class VirtualKeyboard : ContentControl

해당 컨트롤 xaml에

<ContentPresenter Content="{TemplateBinding Content}" Width="300" Height="300"/>

이렇게 만들어 놓고

            <c:VirtualKeyboard >
                <c:VirtualKeyboard.Content>
                    <Image Source="Images/sample.jpg"/>
                </c:VirtualKeyboard.Content>
            </c:VirtualKeyboard>

 

이런식으로 Content를 주입하면 Image가 나타난다.

아주 기초적인것이지만 활용하면 편하니 활용하길~

참고: http://www.mediamob.co.kr/infoland/blog.aspx?id=278585

Posted by 동동(이재동)