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

  1. 2014.05.15 아이폰 갈릴레오 오프라인맵 구글 맵 사용
  2. 2014.05.15 [android] 직접실행창이 없는 이클립스에서 비슷하게 구현하기(inspect 이용)
  3. 2014.05.13 [android] Thread에서 UI Update하기
  4. 2014.05.13 [Android] Thread를 이용한 UDP Server/Client 만들기
  5. 2014.05.09 [Android] 자기 아이피 받기
  6. 2014.04.10 Xaml에 있는 Storyboard를 새로생성된 오브젝트에 적용하기
  7. 2014.04.09 더블탭 구현
  8. 2014.04.08 MediaElement에서 video재생시킬때 출력디렉토리로 복사를 꼭 설정하자
  9. 2014.01.14 [surface] ScatterViewItem 끼리 Drag And Drop
  10. 2013.12.18 [포트폴리오] 롯데시네마 Windows8.1 APP(Hugeflow 2013.11~2013.12)
  11. 2013.12.04 웹에서 이미지 파일 다운받은훙에 이미지를 반으로 각각 Crop 하고 삭제하는 코드
  12. 2013.11.22 TextBlock에서 라인 띄우는 법 1
  13. 2013.10.15 T Generic 리턴하기
  14. 2013.10.07 MCP .Net 3.5 WPF Applicattion Development 자격증 저장
  15. 2013.09.13 [포트폴리오] (일반 터치) TeaTable (Hugeflow 2013.08~2013.09)
  16. 2013.08.08 크로스 플랫폼 p2p 세미나 1
  17. 2013.08.08 [좋은글] 개처럼 삽니다.
  18. 2013.08.08 조엘온 소프트웨어 스터디 문서
  19. 2013.08.08 CLR 스터디 했던거 1
  20. 2013.08.08 [포트폴리오] WINRT(윈도우8) 멜론 App(2013.3~2013.8)
  21. 2013.08.05 숙면에 도움이 되는 자연의 소리등을 모은 사이트들
  22. 2013.07.23 [winrt] dispatcher의 활용 1
  23. 2013.07.19 [VS] Code Snippet의 활용
  24. 2013.07.11 [windows8] 셋팅 페이지 보이게 하기
  25. 2013.07.05 Window8 Phone APP Melon (Hugeflow 2012.09~ 2013.03) 3
  26. 2013.07.05 [Window 8] 기기 해상도와 DPI 값 얻어오기
  27. 2013.06.17 [win8] 윈8 앱 종료 이벤트
  28. 2013.05.07 the activation request failed with error 가 뜨면서 실행이 안될때 1
  29. 2013.03.15 [wp8] Navigation Back Back하기 1
  30. 2013.03.04 [WP8] List Reserve 거꾸로 정렬
좋은 프로그램2014. 5. 15. 14:10

Welcome to Mobile Atlas Creator

 

http://mobac.sourceforge.net/

 

를 다운받고

 

아래파일을 mapsources에 넣고 압축을 풀어준다.

 

해외여행갈때마다 썼는데

 

북마크기능도 1.99$지만 사야겠다... 아..내돈 ㅠㅠ

 

mapsources.zip

 

 

 

Posted by 동동(이재동)
Android App2014. 5. 15. 10:37

아 이클립스 정말... 최악이다...

 

2002년쯤에는 이클립스 우와 좋다 이랬었는데

 

비쥬얼스튜디오의 엄청난 버프를 받다보니.... 비쥬얼스튜디오와 비교될수도있고 익숙하지도 않을수도 있고..

 

디버깅도 구리고 오류처리 능력도 먼가 이상하다...

 

예전 아이폰할때 Xcode욕했었는데 이건머 ... 안드로이드 개발하면서 와...Xcode는 양반이구나 생각했다..

 

일단 이클립스는직접실행창이 없기 때문에 Expressions에 의지하는방법밖에 없나했었는데

 

어라 이클립스는 디버깅중에 코드입력이 가능했다.

 

거기다가 inspect라는 기능을 이용하면 비슷하게 구현가능했따.

 

방법은 코드를 입력후 드래그해서 선택후 Ctrl+Shift+I 누르면 된다..끝~

 

 

 

 

Posted by 동동(이재동)
Android App2014. 5. 13. 16:01

여러가지 방법이 있지만 아래와 post를 이용해 해보았다.

 

다른 방법은 천천히 공부해봐야겠다.

 

recieveMsgTextView.post(new Runnable(){
     public void run() {
      recieveMsgTextView.setText(msg);
     }
    });

 

 

참고 :http://variousapp.egloos.com/1403533

 

Posted by 동동(이재동)
Android App2014. 5. 13. 14:52

피씨와 폰과의 UDP 연결을 위해서 만들어 보았다.

일단 서버 부분이다.

만약 이렇게 쓰레드를 이용하지 않으면 UI가 나오기전에 계속 메세지를 리시브 받을 준비를 함으로 UI가 나오지 않는다.

쓰레드를 이용해서 메세지는 메세지대로 받고 다른 처리는 다른처리대로 하자.

 

static으로 해야하며 UI Update는 c# 의 Dispatcher가 없는데 post라는 메소드가 있어서 이용하였다.

 

static String msg;
 private static void runUdpServer() {
  new Thread(new Runnable() {
   public void run() {
    try{
    int serverPort = 11000;   
    DatagramSocket socket = new DatagramSocket(serverPort);
    
    while(true)
    {
    byte[] buf = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buf,buf.length);
    socket.receive(packet);
    msg = new String(packet.getData(),0,packet.getLength());    
    recieveMsgTextView.post(new Runnable(){
     public void run() {
      recieveMsgTextView.setText(msg);
     }
    });
    }
   }catch(Exception e)
   {
    Log.d("test","r: Error");
   }
   }
    
  }).start();
 }

 

이건 안드로이드에서 메세지를 보내는 부분이다. 보내는부분은 쓰레드를 특별히 이용하지 않았다.

 

button.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    Button clickedButton = (Button) v;

    try {

     byte[] buf = MsgEditText.getText().toString().getBytes();

     InetAddress serverAddr = InetAddress
       .getByName("192.168.10.37");

     DatagramSocket socket = new DatagramSocket();

     DatagramPacket out_datagramPacket = new DatagramPacket(buf,
       buf.length, serverAddr, 12800);
     socket.send(out_datagramPacket);

    } catch (UnknownHostException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (SocketException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  });

 

참조 : http://blog.naver.com/PostView.nhn?blogId=aoba0203&logNo=130169841108&beginTime=0&jumpingVid=&from=section&redirect=Log&widgetTypeCall=true

Posted by 동동(이재동)
Android App2014. 5. 9. 10:36

 

public String getLocalIpAddress() {
        try {
                Enumeration<NetworkInterface> en =  NetworkInterface.getNetworkInterfaces();               
                while(en.hasMoreElements()) {
                       NetworkInterface interf = en.nextElement();                      
                       Enumeration<InetAddress> ips = interf.getInetAddresses();
                            while (ips.hasMoreElements()) {
                              InetAddress inetAddress = ips.nextElement();
                              if (!inetAddress.isLoopbackAddress()) {
                                      return inetAddress.getHostAddress().toString();
                           }
                    }
                }
        } catch (SocketException ex) {
                //Log.e("Error", ex.toString());
         System.out.println(ex.toString());
         
        }
            return null;
      }

 

여러가지 소스를 찾아봤지만 이게 가장 깔끔한거 같다...

 

만약 그냥 저소스를 그대로 쓰면 에러가 난다.

 

NetworkInterface.getNetworkInterfaces();               

 

이부분 에서 exception이 나는데 권한이 없다고 나와서 보니

 

manifest에

 

   <uses-permission android:name="android.permission.INTERNET"/>

 

를 추가하니 잘되었다.

Posted by 동동(이재동)
Surface2014. 4. 10. 11:32

일단 스토리보드는 타겟이 있어야 한다 대부분 디자이너나 블랜드에서 만들면 타겟을

 

Storyboard.TargetName="xDetailItem"

 

이런코드가 삽입된다

 

일단 xaml에서 TargetName을 다 제거한다.. 그리고 이 타겟을 Behind에서 추가해준다.

 

일단 아래와 같이 제거

 

 <Storyboard x:Key="CalculatorOpen">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
                <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
                <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>

 

 

자 이제 code behind에서

 

  ScatterViewItem svi = new ScatterViewItem()
                {
                    Center = (e.Source as DragAndDropScatterViewItem).Center,
                    Content = CalUc,
                    Orientation = 0,
                    Width = 263,
                    Height = 311,
                    RenderTransformOrigin = new Point(0.5, 0.5),
                    CanScale = false,
                };
                TransformGroup transGroup = new TransformGroup();
                transGroup.Children.Add(new ScaleTransform());
                transGroup.Children.Add(new TranslateTransform());
                transGroup.Children.Add(new RotateTransform());
                transGroup.Children.Add(new SkewTransform());
                svi.RenderTransform = transGroup;
                xScatterView.Items.Add(svi);

 

이런식으로 오브젝트를  하나 만들었다.

xaml에 Transform을 이용하기 떄문에 오브젝트에서도 이렇게 만들어줘야 된다.

 

자 간단하게 타겟을 지정해보자.

 

   Storyboard sb = this.Resources["CalculatorOpen"] as Storyboard;

   sb.Begin(svi);

 

아... 간단하다. begin(오브젝트)만 붙이면 된다.

Posted by 동동(이재동)
Surface2014. 4. 9. 16:55

 private readonly Stopwatch _DoubleTapStopwatch = new Stopwatch();

 private Point _LastTapLocation;



  private bool IsDoubleTap(TouchEventArgs e)

        {

            Point currentTapPosition = e.GetTouchPoint(this).Position;

            bool tapsAreCloseInDistance = currentTapPosition.GetDistanceTo(_LastTapLocation) < 15;

            _LastTapLocation = currentTapPosition;


            TimeSpan elapsed = _DoubleTapStopwatch.Elapsed;

            _DoubleTapStopwatch.Restart();

            bool tapsAreCloseInTime = (elapsed != TimeSpan.Zero && elapsed < TimeSpan.FromSeconds(0.4));


            return tapsAreCloseInDistance && tapsAreCloseInTime;

        }


 private void DragAndDropScatterViewItem_PreviewTouchDown(object sender, TouchEventArgs e)

        {

            if (IsDoubleTap(e))

            {

//더블탭시 구현될 코드         

            }

        }



자세한 설명은 생략..

Posted by 동동(이재동)
Surface2014. 4. 8. 11:51

비쥬얼스튜디오에 비디오 파일을 추가하고 단순히 비디오만 나오게 할려고 했는데 안되길래 봤더니 (물리 폴더는 잘되었다 c:\..)


출력디렉토리 복사를 항상복사나,변경된 내용만 복사를 안해놔서 그랬다... 그러니 경로를 못찾을수밖에


이걸 왜 디폴트로 안해놓는건지...



Posted by 동동(이재동)
Surface2014. 1. 14. 11:00

일단 ScatterView안에서 ScatterViewItem A가 있으면 이걸 ScatterviewItem B로 끌어놓으면 없어지면서 이벤트가 발생하고 싶었다.

 

일단 Item A에 ContainerManipulationStarted 이벤트를 걸어서

 

 var svi = e.OriginalSource as ScatterViewItem;
            svi.BeginDragDrop(svi.DataContext);

 

이런식으로 BeginDragDrop 메소드를 실행해야만 한다.

 

그뒤에 끌어놓아질 Item B에는 AllowDrop = true로 하고

 

<s:ScatterViewItem s:SurfaceDragDrop.Drop="xScatterItem_Drop" AllowDrop="True"/>

 

xaml에서 s:SurfaceDragDrop.Drop="xScatterItem_Drop" 이렇게 이벤트를 걸면된다.

 

근데 이상하게 behind에는 안되는데 이유는 찾아봐야 할듯한다.

 

 

 

Posted by 동동(이재동)
포트폴리오2013. 12. 18. 10:42

1차와 2차로 진행될 예정이였던 롯데시네마 앱이다.

 

1차는 범위는

 

-허브 페이지

-현재 상영작

-상영 예정작

-영화 예매율 및 평점 순위

-전국 롯데시네마 영화관

-영화 상영시간

-공지사항 / 자주묻는 질문

 

였다….

 

2차는 결제 및 로그인을 추가하는것인데

 

나는 1차보다는 2차 기술 검토를 많이 했다…

 

롯데시네마 앱개발자도 없고 정확히 아는 사람 그리고 머 문서도 하나도 없어서

 

안드로이드, 아이폰 앱을 분석해서 많은 정보를 알아냈다 ㅠ.ㅠ

 

그리고 롯데시네마 테스트 서버에 ssl 인증서가 깔려있지 않아서 테스트하는데 애를 먹었다.

 

윈8에서 ssl 인증서를 무시하는게 8.1 sdk에서만 가능했다 다행히 8.1 프로젝트라 ssl문제는 해결했지만

 

로그인 쿠키 정보나 user agent 등의 정보는 피들러로 확인을 해서 해결하였다…(힘든 여정 에고)

 

근데 문제는 결제쪽이였다. 결제는 다른 플랫폼도 다 웹뷰를 사용했다…

 

하지만 윈8 용 웹뷰는 ssl 인증 무시도 안되고 스크립트 notify , 자바스크립트 alert를 지원하지 않아서

 

할수 없이 서버작업을 해야할 사항이였다…

 

일단 조사는 여기까지 하고 1차를 우선적으로 개발하였다.

 

머 1차는 별로 어려운게 없었다… 라이브 타일 템플릿을 자꾸바꿔서 귀찮긴했지만 ㅎ

 

 

 

 

 

 

 

 

Posted by 동동(이재동)
Windows8 App2013. 12. 4. 13:29
private async void GetFile()
       {
           Uri source = new Uri(imgUrl);
           StorageFile destinationFile;
           try
           {
               destinationFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
                   "downloadimage.jpg", CreationCollisionOption.GenerateUniqueName);
           }
           catch (FileNotFoundException ex)
           {
               return;
           }
           BackgroundDownloader downloader = new BackgroundDownloader();
           DownloadOperation download = downloader.CreateDownload(source, destinationFile);
           await download.StartAsync();
 
           //ResponseInformation response = download.GetResponseInformation();
           var stream = await download.ResultFile.OpenReadAsync();
 
           BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
           InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
           BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(ras, decoder);
 
           BitmapBounds bounds = new BitmapBounds();
           bounds.Height = 274;
           bounds.Width = 382;
           bounds.Y = 0;
           bounds.X = 0;
 
           enc.BitmapTransform.Bounds = bounds;
           await enc.FlushAsync();
 
           BitmapImage bImg = new BitmapImage();
           bImg.SetSource(ras);
           xImage.Source = bImg;
 
           //2
           InMemoryRandomAccessStream ras2 = new InMemoryRandomAccessStream();
           BitmapEncoder enc2 = await BitmapEncoder.CreateForTranscodingAsync(ras2, decoder);
           BitmapBounds bounds2 = new BitmapBounds();
           bounds2.Height = 274;
           bounds2.Width = 382;
           bounds2.Y = 274;
           bounds2.X = 0;
 
           enc2.BitmapTransform.Bounds = bounds2;
           await enc2.FlushAsync();
 
           BitmapImage bImg2 = new BitmapImage();
           bImg2.SetSource(ras2);
           xImage2.Source = bImg2;
 
           var filed = await ApplicationData.Current.LocalFolder.GetFilesAsync();
 
           foreach (var item in filed)
           {
               //그냥 모두 삭제 삭제 안된 파일이 있을경우 파일이 커지는경우를 방지
               await item.DeleteAsync();
           }
       }

 

참고

다운로드

http://stackoverflow.com/questions/19272878/how-to-save-image-downloaded-from-urlserver-to-local-folder-in-windows-store-a

 

crop

http://stackoverflow.com/questions/12349611/how-to-resize-image-in-c-sharp-winrt-winmd

 

삭제:

http://stackoverflow.com/questions/14978526/how-delete-file-in-localstorage-on-winrt

Posted by 동동(이재동)
Windows8 App2013. 11. 22. 16:21
testText.Text = "Testing 123" + Environment.NewLine + "Testing ABC";
 
StringBuilder builder = new StringBuilder();
builder.Append(Environment.NewLine);
builder.Append("Test Text");
builder.Append(Environment.NewLine);
builder.Append("Test 2 Text");
testText.Text += builder.ToString();

http://stackoverflow.com/questions/15582398/programmatic-textblock-entry-with-linebreaks

Posted by 동동(이재동)
Windows8 App2013. 10. 15. 10:19

롯데시네마 같은 경우는 API를 따로 프로젝트로 빼내었다 유닛테스트에서도 사용하고 여러곳에서 유연하게 사용하기 위함

 

하지만 그렇게 함으로써 메세지박스를 뛰우지를 못해서 error 메세지만 따로 보내야 하는 경우가 생겼다..

 

그럴때 이렇게 하였다.

 

protected async Task<T> GetObjectAsync<T>(string url, HttpContent content) where T : ResultBase, new()
        {
            var uri = new Uri(BASE_DOMAIN + url);
            HttpResponseMessage result = null;
            try
            {
                result = await _httpClient.PostAsync(uri, content);
            }
            catch (Exception ex)
            {
                //var temp = new ResultBase() { err_message = ex.Message };
                return new T() { err_message = ex.Message };

            }

 

이부분을 잘보면 된다.

protected async Task<T> GetObjectAsync<T>(string url, HttpContent content) where T : ResultBase, new()

 

그래서 리턴을 이런식으로 가능하였다.

 return new T() { err_message = ex.Message };

참고한곳

http://stackoverflow.com/questions/4712567/c-sharp-generic-method-return-values

 

 


 


 

Posted by 동동(이재동)
포트폴리오2013. 10. 7. 11:59

나중에 출력할때 편하도록 여기에 저장 


 

MS_Learning_Transcript.PDF

 

MS_Learning_Transcript.XPS

 

Posted by 동동(이재동)
포트폴리오2013. 9. 13. 11:32

Surface에서는 태그 인식기술을 이용해서 사진 동영상을 띄울수 있었지만


일반 터치 패널에서는 태그를 인식할수 없기 때문에 물체(Object)의 크기를 인식해서 


서피스 태그처럼 구현한 프로젝트~


예를 들면 패널에 컵이나 차를 올리는것만으로도 5센치부터 10센치까지 둘레를 이용해서 


5센치컵을 올리면 5센치 컨텐츠를


6센치컵을 올리면면 6센치 컨텐츠를  화면에 보여준다.


서피스의 장점인 태그 인식기술이 이제 점점 필요 없게 되버린거 같다.


마지막은 TeaTable Content Manager로 


사용자가 직접 해당 Object의 Content를 센치별로 쉽게 바꿀수 있도록 도와주는 프로그램이다.








 

Posted by 동동(이재동)
세미나2013. 8. 8. 15:00

기본적인거라 부끄럽긴하다...

 

 

cross flatform p2p.txt

 

Cross Platform For Peer to Peer.pptx

 

Posted by 동동(이재동)
세상사는 이야기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
이문제 풀어보자  (1) 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/  (1) 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에서 라인 띄우는 법  (1) 2013.11.22
T Generic 리턴하기  (0) 2013.10.15
[winrt] dispatcher의 활용  (1) 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에서 라인 띄우는 법  (1) 2013.11.22
T Generic 리턴하기  (0) 2013.10.15
[winrt] dispatcher의 활용  (1) 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 동동(이재동)