집에 NAS가 하나 있습니다. 모두 아시는 내용이죠?? 이 녀석 사용하지 좀 오래 된 듯한데.. 하여간 지금 시놀로지(헤놀로지) 5.2-5644 Update 5 버전이 설치가 되어있고, 영화, 음악, 사진 등을 잘 넣어서 보고있는데.. 



오늘 아침에 갑지가 이 녀석에게 DB 설치가 가능할 것 같다는 느낌이 딱! ... 결국 3시간 만에 성공을 한 것 같습니다.



0. 참고


https://m.blog.naver.com/PostView.nhn?blogId=oioi9i&logNo=220408830865&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

http://zetawiki.com/wiki/MySQL_원격_접속_허용



1. 설치는 쉬웠다!



피키지 센터에 MariaDB가 있어서 찾아보니 과거 MySQL의 친구(?) 버전이라 호화성이나 성능이 괜찮을 것 같아서 설치하기로 하고, Install 버튼을 누르니 특별히 뭐 물어보는 것도 없이 바로 설치 완료..


으흠;;



2. Admin계정 비밀번호 등은??



물개를 클릭하면 간단한 윈도우가 하나 뜨는데..



Change MariaDB password 버튼을 클릭해서, root 계정의 비밀번호를 변경할 수 있습니다. root가 admin인 것 같습니다..아마도..



3. DB설치는 되었는데, 어떻게 접속을 해야하지??


마리아 DB TX Tools 폴더에 오면 Tools 다운로드가 지원됩니다. 

https://mariadb.com/downloads/mariadb-tx/tools 


SQLyog를 선택하고 Download 버튼을 클릭하면, 응용프로그램이 다운 됩니다. 14일간 트라이얼로 사용할 수 있는 버전으로 정식으로는 99불을 주고 사면 됩니다.


물론 MySQL과 동일하기 때문에 MySQL 관리가 가능한 다른 프로그램을 사용하셔도 상관 없습니다.



4. DB 접속 1차 시도


처음 시도는 역시 실패! 실패 이유는 DB가 외부접속을 허용하지 않기 때문입니다.


DB를 외부접속 가능하게 하려면.. 3개의 DB 커맨드를 날려야 하는데..


이 커맨드를 날릴려면 NAS에 Telnet으로 접속을 해야 합니다.



5. NAS에 Telnet으로 접속하기



NAS에 Telnet으로 접속하기 위해서는 Control Panel에서 Terminal & SNMP를 선택해서 Enable Telnet service, Enable SSH service 2개를 체크 해 주고, Apply를 클릭합니다.


이제 Telnet을 이용해서 NAS에 접속 할 수 있습니다. 음음..그런데 윈도에 기본적으로 Telnet 클라이언트 설치가 되어 있지 않으니 설치를 해야겠죠?


Telnet 클라이언트 설치하는 부분에 대해서는 설명을 생략하겠습니다.



6. Telnet 클라이언트로 NAS 접속, MariaDB 접속


윈도우에서 Windows PowerShell을 실행 하고, 다음의 명령을 입력해서 NAS에 연결합니다. 아이피 주소는 자신의 NAS IP 주소입니다.


telnet 192.168.35.94



아이디와 패스워드를 입력해야 하는데..원래 사용하던 계정으로 로그인이 앙되더라구요..그래서 admin 계정을 사용할 수 있게 변경해야합니다.(원래 사용하던 계정을 사용해서 로그인할 수 있으면 그걸로 그냥 하셔도 될 듯..)



User -> admin -> Disallow the user to change account password, Disable this account 2가지의 체크를 풀고, OK를 입력합니다. 


BusyBox v1.16.1 (2015-11-12 18:06:25 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.


kaki_server>


로그인이 완료되면 대충 이런 메시지가 출력됩니다. 후후


이제 MariaDB에 연결해서 쿼리를 날려줘야 하는데. db에 연결하는 명령어를 몰라서 찾아보니..


kaki_server> mysql -u root -p

Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.47-MariaDB Source distribution


Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


MariaDB [(none)]>


password는 아까 변경해준 녀석을 입력하시면 될 것 같습니다. 아마도..



7. 외부 접속 가능하도록 쿼리 입력


MariaDB [(none)]> INSERT INTO mysql.user (host,user,authentication_string,ssl_cipher, x509_issuer, x509_subject) VALUES ('%','root',password('패스워드'),'','','');
Query OK, 1 row affected (0.00 sec)


MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)


MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)


굵은 글씨 부분을 차례대로 입력하시고, 패스워드는 패스워드를 입력해 주세요, 


여기까지 하시면 외부에서 db에 연결 할 수 있습니다.



8. DB 접속 2차 시도..


4번으로 돌아가서 비밀번호를 입력하고 connect를 입력하면~



짜잔~ 연결이 되었습니다.



9. 주의사항


telnet 접속이 가능하도록 열어 놓고 작업을 한 후 바로 닫아 주어야 합니다. 그렇지 않으면 무지막지한 공격이 들어옵니다..쿨럭..


블로그 이미지

MVP kaki104

* Microsoft MVP - Windows Development 2014 ~ 2019 5ring * LINE : kaki104 * facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/

Tag mariaDB, mysql, Nas

이번 포스트는 UWP 앱 숙원 2탄으로 멀티 인스턴스에 대한 내용을 다루어 보도록 하겠습니다.


ps. 어제 우리나라는 지고, 오늘 일본은 이겼군요.....ㅡ,.ㅡ



1. 참고

https://docs.microsoft.com/ko-kr/windows/uwp/launch-resume/multi-instance-uwp



2. 멀티 인스턴스 앱을 만들기 위한 준비


멀티 인스턴스 앱을 만들기 위해서는 Multi-Instance App Project Templates.VSIX를 설치하고, 그 템플릿을 이용해서 앱을 만들어 주어야 합니다.


다운로드


물론 기존 앱에도 package.appxmanifest 파일을 수동으로 수정해서 만들 수 있을 것으로 생각됩니다.




3. 프로젝트 생성


프로젝트를 생성하는 화면에 2개의 템플릿이 추가됩니다. 


1) Multi-Instance Redirection UWP app

앱의 시작점에서 인스턴스 생성하거나, 기존 인스턴스 중에 하나를 선택해서 활성화 시키는 앱을 만듭니다.


2) Multi-Instance UWP app

일반적인 멀티 인스턴스 UWP 앱을 생성합니다.



4.  Package.appxmanifest


         xmlns:desktop4="http://schemas.microsoft.com/appx/manifest/desktop/windows10/4"
xmlns:iot2="http://schemas.microsoft.com/appx/manifest/iot/windows10/2" 

...

<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="KakiViewer.App" desktop4:SupportsMultipleInstances="true" iot2:SupportsMultipleInstances="true">

...



package.appxmanifest 파일에서 굵은 글씨 부분이 새로 추가된 기능입니다. 또한, 위위의 내용처럼 이 멀티 인스턴스 앱은 데스크탑과 IoT에서만 가능하다는 것을 알 수 있습니다.



5. KakiViewer 프로젝트의 키 포인트!


이미지 뷰어를 만들어 보았습니다.


1) 프로젝트 버전 설정


Target version, Min version 모두 Windows 10, version 1803로 선택하셔야 합니다.


2) 확장자 연결


Package.appxmanifest의 Declarations 탭에서 File Type Associations를 추가해서 png 파일과 연결을 했습니다.


3) 파일 열기 프로그램으로 실행된 경우 처리


App.xaml.cs


        protected override void OnFileActivated(FileActivatedEventArgs args)
        {
            if (!(Window.Current.Content is Frame rootFrame))
            {
                rootFrame = new Frame();
                Window.Current.Content = rootFrame;
            }
            if (rootFrame.Content == null)
            {
                var parameter = string.Empty;
                if (args.Files.Any())
                    parameter = args.Files[0].Path;
                rootFrame.Navigate(typeof(MainPage), parameter);
            }
            Window.Current.Activate();
        }


파일 열기로 앱이 시작되면 OnFileActivated를 구현해야 합니다. 그리고, 전달 받은 파일의 정보는 오직 Path만 알 수 있내요... 그 이상의 정보를 알아내는 방법은 현재 상황에서는 모르겠습니다. 디버그를 통해서 직접 확인하세용


4) 이미지 파일을 열어서 표시하는 방법


            var firstFile = await StorageFile.GetFileFromPathAsync(filePath);
            if (firstFile == null) return;

            using (var stream = await firstFile.OpenReadAsync())
            {
                var bi = new BitmapImage();
                bi.SetSource(stream);
                Image.Source = bi;
            }


에..여기서 firstFile이 StorageFile형태이기는 한데..파일의 정보를 알 수는 없습니다.

아마 보안 사항이기 때문일지도..ㅡㅡ;;; 머징..


아니면, filePath 중 폴더 정보만 빼내서 폴더 정보를 먼저 가지고 오고 그 폴더에서 파일을 찾아서 가져오면 상세 정보도 알 수 있을 듯 합니다. 물론 이 경우 지난 포스트에서 다루었던 broadFileSystemAccess을 사용해야 합니다.


5) 디버그 하는 방법


프로젝트 속성 -> Debug -> Start action -> Do not launch, but debug my code when it starts를 체크하고 디버그로 실행 합니다.


파일 탐색기에서 png 파일을 마우스 오른쪽 버튼으로 눌러서 열기 할 프로그램을 선택하시면 디버그가 가능 합니다.



6. 소스

https://github.com/kaki104/UWP_17134


블로그 이미지

MVP kaki104

* Microsoft MVP - Windows Development 2014 ~ 2019 5ring * LINE : kaki104 * facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/


오랜만에 포스트를 작성하네요. 음..변명을 하자면.. 챗봇 공부를 하고 있는 중이였는데 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;
            }
        }


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


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


블로그 이미지

MVP kaki104

* Microsoft MVP - Windows Development 2014 ~ 2019 5ring * LINE : 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
블로그 이미지

MVP kaki104

* Microsoft MVP - Windows Development 2014 ~ 2019 5ring * LINE : 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



블로그 이미지

MVP kaki104

* Microsoft MVP - Windows Development 2014 ~ 2019 5ring * LINE : kaki104 * facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/

티스토리 툴바