오랜만에 포스트를 작성하네요. 음..변명을 하자면.. 챗봇 공부를 하고 있는 중이였는데 Build 2018 동영상이 나와서 그것 좀 보다가..끝나고 나니..뭘해야할지..막막


사실 Windows ML을 하려고 했으나, 머신 러닝을 위해서는 파이선을 공부해야 한다고 해서 한 몇일 고민하다가.. 일단 파이선 공부는 뒤로 미루고, Build에서 발표된 새로운 UWP에 기능에 대해서 집중하기로 마음을 먹고.. 마음의 위안을 삼은체 탱자 탱자 하다가.. 오늘에서야 ...ㅋㅋㅋ



하지만, 오늘 대박 소식을 전하려고 합니다. 그동안 UWP의 숙원 사업(?) 중에 하나가 사용자의 허가를 받지 않은 로컬 폴더와 파일의 목록을 조회하고, 열어서 가지고 오는 것이 있었습니다.


이 부분이 않되어서 참 많은 어려움이 있었죠..하지만, 이번 Build에서 드디어 추가되었습니다~ 와~~~ 그러면 자세히 알아 보도록 하겠습니다.



1. 참고

https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions

https://github.com/Microsoft/AppModelSamples



2. BroadFileSystemAccess


이 녀석이 그 녀석입니다. 사용자의 허가(앱을 설치할 때)를 받으면 그 이후 부터는 폴더와 파일에 접근할 때 별도의 허가 없이도 가능합니다. 하지만, 이 녀석을 사용하기 위해서는 선행 조건이 있습니다.


UWP 앱 Target, Min 버전이 17134이여야 합니다.

또한, Windows 10 버전도 1803 버전이여야 합니다.

* 물론 Visual Studio 최신 버전이 필요하고, Windows SDK도 최신 버전이 필요합니다.

이 두가지 조건에 만족한다면, 바로 사용이 가능하며, 추가로 약간 귀찮은 작업을 해줘야 합니다.


Capability의 기능이기 때문에 Package.appxmanifest에 정의를 해줘야 하는데...

GUI 화면에서는 이 녀석을 찾을 수가 없습니다. (현재는.. 추후 추가될 것이라고 생각됩니다만..) 그래서, Package.appxmanifest 파일을 xaml editer로 열어서 수동 편집해 주어야 합니다.


<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp uap5 rescap">


...


  <Capabilities>
    <Capability Name="internetClient" />
    <rescap:Capability Name="broadFileSystemAccess" />
  </Capabilities>




3. C:/ 폴더와 서브 폴더 목록을 가지고와 볼까요?


var rootFolder = await StorageFolder.GetFolderFromPathAsync(@"c:\");


이렇게 코딩하면 바로 c:/ 루트 폴더를 가지고 올 수 있습니다. 아무것도 묻거나 따지지 않습니다~ 여기가 바로 신세계입니다~ 


서브 폴더는 어떻게 가지고 오냐구요?

그건 이전과 동일하게, GetFoldersAsync()를 이용하면 됩니다.


        private async void GetSubDirectories(StorageFolder folder, TreeViewNode folderNode, int depth = 0)
        {
            try
            {
                if (depth > 1) return;
                var subDirs = await folder.GetFoldersAsync();
                if (subDirs.Any() == false || folderNode.Children.Any()) return;
                foreach (var subDir in subDirs)
                {
                    var subDirNode = new TreeViewNode
                    {
                        Content = new DirectoryModel
                        {
                            Name = subDir.Name,
                            Path = subDir.Path,
                            HasSubDirectory = false
                        },
                    };
                    GetSubDirectories(subDir, subDirNode,depth + 1);
                    folderNode.Children.Add(subDirNode);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }



4. WPF 프로그램을 UWP로 대체하는 날이 얼마 남지 않은 듯 합니다.


다만, 걱정은 우리나라 WPF 개발 시장과 개발자의 인식이 좀.. 거시기 하다는.. 흑흑..

왜 아직도 윈폼으로 개발하고 있나요..엉엉(물론 지금 제가 진행하는 프로젝트도 WPF 개발자를 구하지 못해서 방황하는 중이지만..) 그래도 이제는 WPF 더 나아가서 UWP 프로젝트가 마니 생기기를..


당분간 새로 추가된 기능들을 아래 소스 폴더에 정리할 예정입니다.



5. 소스


https://github.com/kaki104/UWP_17134



PS. 27일날 갑자기 방문자수가 500을 넘게 찍었던데 무슨일이 있었떤 거죠??



6. 질문 주신 내용에 대한 소스 추가 합니다.


DownloadsFolder.CreateFileAsync
DownloadsFolder.CreateFolderAsync

를 사용하면 파일 생성은 가능하지만 이미 생성된 파일이나 폴더가 있을 경우 get 할 수 있는 OpenIfExists 같은 CollisionOption 을 사용할 수가 없네요. BroadFileSystemAccess 을 사용해도 마찬가지 인것 같고요

picker 를 이용하지 않고 UWP 사용자 폴더의 파일이나 폴더에 접근하여 가져오고 데이터를 쓰고 하는 다른 방법이 있을까요?


6-1. Create


        private async void CreateFileInSelectedFolder()
        {
            if (_selectedFolder == null) return;
            var file = await _selectedFolder.CreateFileAsync("TextFile.tmp", CreationCollisionOption.OpenIfExists);
            if (file == null) return;
            var msg = new MessageDialog("Successful creation or opening operation");
            await msg.ShowAsync();
        }



6-2. Open


        private async void OpenFile()
        {
            if (_selectedFolder == null) return;
            try
            {
                var file = await _selectedFolder.GetFileAsync("TextFile.tmp");
                if (file == null) return;
                var msg = new MessageDialog("Successful opening operation");
                await msg.ShowAsync();
            }
            catch (FileNotFoundException ffe)
            {
                var msg = new MessageDialog(ffe.Message);
                await msg.ShowAsync();
            }
            catch (Exception)
            {
                throw;
            }
        }


문의하신 내용에 대한 답변이 되었는지 모르겠습니다. 추가로 궁금하신 사항은 다시 적어주세요 감사합니다.


소스도 올려 놓았으니 참고하세용


블로그 이미지

kaki104

/// Microsoft MVP - Windows Development - Apr 2014 ~ Mar 2018 /// email : kaki104@daum.net, twitter : @kaki104, facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/



올해 빌드의 핵심 키워드는 Microsoft Azure와 Microsoft 365 입니다. 여기서 Microsoft Azure는 클라우드 서버가 아닌 디바이스 이야기이며, Microsoft 365도 뒤에 Office가 없습니다. 즉, Office를 뛰어 넘는 더 큰 개념의 365로 365일 Microsoft와 함께 보낼 수 있는..이라는 뜻으로 추측됩니다. ㅋㅋ



1. Day 1


Microsoft Build 2018 Keynote in Under 15 Minutes

 

* Microsoft Azure

이제는 Azure가 클라우드 서비스 뿐만아니라 IoT Device에도 본격적으로 연결 합니다.


1) Azure IoT Edge :  


. Qualcomm accelerated camera : 


홈 시큐리티, 공장 보안이 가능하며 마이크로소프트의 비전 툴킷이 탑재되어 있습니다.

. Windows SDK and Commercial Drone Solutions :



 - Azure IoT Edge는 Azure 클라우드 서비스를 벗어나 장치에 직접 배치되어 원격으로 관리되며, 모든 장치가 라즈베리 파이보다 작고, 대시보드에서 호출 할 수 있는 기능이 탑재 됩니다.
 - AI machine learning을 이용해서 만든 AI Model을 Docker 컨테이너에 패키지해서 배포 할 수 있습니다.
- 일반 카메라는 공장 내부에 이상 현상을 확인하고 알람을 발생할 수 있으며, 드론은 공장 외부에서 이상 현상을 확인 할 수 있습니다.


2) Azure AI-enabled edge devices
- Speech Device SDK & Reference Kits


음성 출력 디바이스 사진입니다. 인식은 앙되는 듯..


- Project Kinect for Azure


키넥트 생산이 중지되면서, 이젠 못 볼줄 알았는데.. 이렇게 발표를 하네요 크기가 얼마인지는 모르지만, 소형화가 되어서 어디든지 쉽게 넣을 수 있다면, 여러가지 디바이스 만드는데 활용 될 것 같습니다.


3) Azure Conversation AI
- Bot Framework updates

봇 프레임웍이 업데이트가 되었다는데..자세한 사항을 들어가서 확인해 보아야 할 것 같습니다.


4) Azure AI Infrastructure
- Brainwave (Real-time AI)

AI 칩을 이야기하는 듯합니다. 



* Microsoft 365
1) Cortana + amazon Alexa


코타나와 알렉서가 친구가 되었습니다. 하하하 AI 스피커 2개다 살까하다가, 알렉사 주문하는데 한국에 배송 못해준다고 해서 그냥 사지 않았는데..잘 한 것 같네요.


2) MR business applications
- Microsoft Remote Assist
- Microsoft Layout

MR용 프로그램을 발표했는데..음..MR이 없어서 패스;;


3) AI for Accessibility


 
2. Day 2
 
Microsoft Build 2018 keynote in under 5 minutes

 

. Timeline on Phone


1803 버전에 생긴 Timeline이라는 기능이 안드로이드의 사용 내용까지도 같이 보여줄 수 있는 기능입니다. 이 기능을 이용하기 위해서는 Play store에서 Microsoft Launcher를 설치하시고 기본 런처로 등록해 주셔야 합니다. 


그런데, 저 설치 해봤는데..아직 연동이 앙되더라구용 뭘 잘못했나?? 머 몇일 지나면 되겠죠 ㅋㅋ


. A new way to bring your phone & PC together

안드로이드 폰에 문자가 오면 PC에서 내용 확인하고 PC에서 입력하고..이미지 보내고 받고, 등등 안드로이드 폰을 PC로 바로 이용하는 기능입니다.


음음..사무실에서 일할 때 많이 사용할 것 같습니다. 저는 비록 안드로이드 폰이 없지만.. 쿨럭;; 이런 기능을 윈도우 폰에도 언능 넣어 달라고!!!


. Word with WinML

음 미국인도 문서 작성할 때 오타를 자주 만드는 것 같습니다. 후후후;;;

WinML이 Windows Machine Learning을 이야기 하는데.. 머신러닝으로 학습한 AI 모델을 워드에 넣어서 문서를 작성할 때 도움을 준다는...


. Notepad supports Linux line feeds

음 노트패드가 리눅스 line feed를 지원하는 것이 좋아할 일인지는 저도 잘 모르겠네요.. 좋은 건가요??


. Windows Store - New revenue share model


 - 게임과 상업용 앱을 제외한 나머지 앱의 수익율을 85% ~ 95% 상향

. Payments in Outlook (Microsoft Pay)

아웃룩에서 결제를 할 수 있는 기능이 추가되었다네요..그런데 국내에서 사용 가능 할지는 모르겠는..


. Microsoft Graph

마이크로 소프트 그래프는 지난번 동영상에서 다루었기 때문에 패스~

. Microsoft Graph UWP Controls

마이크로 소프트 그래프를 UWP에서 쉽게 사용할 수 있도록 컨트롤를 제공해 준다고 하네용~

https://aka.ms/windowstoolkit
 
3. Day3?

Day3는 그냥 동영상만 나오더라구요..


짧게 편집한 동영상들에는 개발자를 위한 내용은 나오지 않네요 ㅋㅋ 개발자를 위한 내용도 중간에 조금 있는데.. 나중에 직접 동영상으로 만들어서 포스팅 하도록 하겠습니다.


그런데, 빌드 끝나자마자 구글 IO하는건..뭔지.. MS랑 구글이랑 행사 일자 일부러 그렇게 잡은 걸까요??


'Windows 10 > News' 카테고리의 다른 글

Microsoft Build 2018 정리  (0) 2018.05.12
//BUILD/ 2015 News  (0) 2015.04.30
블로그 이미지

kaki104

/// Microsoft MVP - Windows Development - Apr 2014 ~ Mar 2018 /// email : kaki104@daum.net, twitter : @kaki104, facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/


이번 포스트는 Bot에서 OneDirve의 파일을 조회하고 사진이나 음악 파일을 재생 시킬 수 있는 방법에 대해서 설명을 하려고 합니다.


Bot 만들고, ppt만드는데 2주넘게 걸린 것 같네요.. 과정이 너무 까다롭고 레퍼런스가 없어서 삽질의 끝을 본 것 같습니다.



1. 환경및준비
2. 참고자료
3. Microsoft Graph
4. 시스템 구성
5. BotAuth
6. OneDriveBot 작업 순서
7. 핵심코드


8. 동영상

https://youtu.be/FQb2Imp00to


9. PDF


OneDriveBot.pdf



블로그 이미지

kaki104

/// Microsoft MVP - Windows Development - Apr 2014 ~ Mar 2018 /// email : kaki104@daum.net, twitter : @kaki104, facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/


이번 포스트는 Bot Framework와 LINE 메신저를 Direct Line을 이용해서 연결하는 방법에 대한 내용입니다.


1. 환경 및 준비

2. 참고자료

3. Line Message API

4. 시스템 구성도

5. What you can do with the Messaging API

6. Bot Framework와 LINE Message API 연결 준비

7. 채널 설정 페이지

8. Azure Storage account 생성

9. Connection string

10. Azure App Service

11. 로컬 WebApp 서비스 디버깅

12. 이후 작업

13. 봇 테스트

14. 봇 수정

15. 최종 결과 화면


동영상

https://youtu.be/VX62Mt-sJ1A



라인 봇 채널 추가 QR Code


PDF


BotToLine.pdf



블로그 이미지

kaki104

/// Microsoft MVP - Windows Development - Apr 2014 ~ Mar 2018 /// email : kaki104@daum.net, twitter : @kaki104, facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/


이번 포스트 주제는 Direct Line API를 이용해서 나만의 챗봇 클라이언트를 만드는 방법에 대한 내용입니다.

그리고, 일반 택스트 문자열이 아닌 Hero Card와 이미지를 어떻게 만들어서 사용하는지도 살펴 볼 수 있습니다.


1. 내용

. 환경 및 준비
. 참고 자료
. Direct Line API 3.0
. Direct Line API를 사용하기 위한 준비
. Bot key point
. Client key point
. Bot 개발
. 소스


2. 동영상

유뷰브 채널로 이동하시면 지금까지 올린 다른 강의도 보실 수 있습니다. 구독 신청 부탁드립니다.


Direct Line 동영상



3. PPT


directLine.pptx


블로그 이미지

kaki104

/// Microsoft MVP - Windows Development - Apr 2014 ~ Mar 2018 /// email : kaki104@daum.net, twitter : @kaki104, facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/

티스토리 툴바