<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chen Yu Pao</title>
    <description>The latest articles on DEV Community by Chen Yu Pao (@windperson).</description>
    <link>https://dev.to/windperson</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F160471%2Fdafe4437-fd1e-4b27-a5ac-ad18b02caeea.jpeg</url>
      <title>DEV Community: Chen Yu Pao</title>
      <link>https://dev.to/windperson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/windperson"/>
    <language>en</language>
    <item>
      <title>Use Intel RealSense camera in .NET 5 project</title>
      <dc:creator>Chen Yu Pao</dc:creator>
      <pubDate>Wed, 18 Aug 2021 20:32:30 +0000</pubDate>
      <link>https://dev.to/windperson/use-intel-realsense-camera-in-net-5-project-3gd</link>
      <guid>https://dev.to/windperson/use-intel-realsense-camera-in-net-5-project-3gd</guid>
      <description>&lt;p&gt;&lt;strong&gt;Prerequisite software tool&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://visualstudio.microsoft.com/vs" rel="noopener noreferrer"&gt;Visual Studio 2019&lt;/a&gt; with &lt;strong&gt;.NET desktop development&lt;/strong&gt; &amp;amp; &lt;strong&gt;.NET cross-platform development&lt;/strong&gt; &amp;amp; &lt;strong&gt;Desktop development with C++&lt;/strong&gt; workload:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmfvueu5b6rdpkzktinf.png" alt="visual studio 2019 install workload" width="800" height="393"&gt;
&lt;/li&gt;
&lt;li&gt;Windows 10 SDK version 10.0.10586 or later:
Can be installed via Individual Components section of Visual Studio 2019 Installer:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkm7dynledo9wyl51n2g0.png" alt="Install with VS2019" width="800" height="446"&gt;
or Use &lt;a href="https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk" rel="noopener noreferrer"&gt;downloaded SDK installer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cmake.org" rel="noopener noreferrer"&gt;CMake&lt;/a&gt; and add its executable location to PATH environment variable.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Build native RealSense library &amp;amp; C# wraaper&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Build Windows version native RealSense library&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On Windows 10 machine that had above Prerequisite software tools installed, Clone the source from &lt;a href="https://github.com/IntelRealSense/librealsense" rel="noopener noreferrer"&gt;Intel RealSense SDK git repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generate Visual Studio solution files in git repository top level directory via &lt;a href="https://docs.microsoft.com/en-us/visualstudio/ide/reference/command-prompt-powershell?view=vs-2019" rel="noopener noreferrer"&gt;Developer Command Prompt/PowerShell for VS 2019&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmake&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DBUILD_CSHARP_BINDINGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DBUILD_SHARED_LIBS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Generated files are inside the &lt;code&gt;build&lt;/code&gt; directory:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpviyo17jl31vdrnd81z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpviyo17jl31vdrnd81z.png" alt="CMake file generated" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open generated &lt;strong&gt;build\librealsense2.sln&lt;/strong&gt; solution file in Visual Studio 2019, if prompt the following dialog, select first option to change target to .NET framework 4.6.1:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs5c6o32vw79p0nmmd7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs5c6o32vw79p0nmmd7h.png" alt="Change target framework of Intel.RealSense project" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the C++ project in &lt;strong&gt;Library/realsense2&lt;/strong&gt;, then make sure the configuration is set to Release, and x64:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykzzdovd9unc9enmaewo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykzzdovd9unc9enmaewo.png" alt="Set realsense2 visual studio build configuration" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Right click and select build to start building native RealSense C++ library dll for Windows:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg3qounyo631e997bhm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg3qounyo631e997bhm7.png" alt="Build C++ native lib" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It will take quite a long time to build, after successfully build, there should be a &lt;code&gt;realsense2.dll&lt;/code&gt; file inside the &lt;strong&gt;build\Release&lt;/strong&gt; folder:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm2cicrzg79h0j4iqd5xa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm2cicrzg79h0j4iqd5xa.png" alt="Native dll release build files location" width="800" height="261"&gt;&lt;/a&gt;&lt;br&gt;
This is the native RealSense library for Windows, copy it for later usage.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Build .NET 5 C# wrapper of RealSense SDK&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a text file called &lt;code&gt;Intel.RealSense.csproj&lt;/code&gt; inside the &lt;strong&gt;wrappers\csharp\Intel.RealSense&lt;/strong&gt; folder with following content:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Project&lt;/span&gt; &lt;span class="na"&gt;Sdk=&lt;/span&gt;&lt;span class="s"&gt;"Microsoft.NET.Sdk"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TargetFramework&amp;gt;&lt;/span&gt;net5.0-windows&lt;span class="nt"&gt;&amp;lt;/TargetFramework&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;GenerateAssemblyInfo&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/GenerateAssemblyInfo&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;dotnet build -c Release&lt;/code&gt; in &lt;strong&gt;wrappers\csharp\Intel.RealSense&lt;/strong&gt; directory:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cxlvt6jposqjjutq8t2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cxlvt6jposqjjutq8t2.png" alt="Build release version of C# wrapper" width="800" height="655"&gt;&lt;/a&gt;&lt;br&gt;
And you will find two files &lt;code&gt;Intel.RealSense.dll&lt;/code&gt; &amp;amp; &lt;code&gt;Intel.RealSense.pdb&lt;/code&gt; inside the &lt;strong&gt;wrappers\csharp\Intel.RealSense\bin\Release\net5.0-windows&lt;/strong&gt; directory, these two are C# wrapper library files, copy them for later usage:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6ofsoavwvfufatlk7b2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6ofsoavwvfufatlk7b2.png" alt="C# wrapper library files" width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;.NET 5 project usage demo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Demo project is on GitHub: &lt;a href="https://github.com/windperson/Net5RealSenseDemo" rel="noopener noreferrer"&gt;https://github.com/windperson/Net5RealSenseDemo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is just a .NET 5 console project, but you have to manually modify the .csproj file content:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set &lt;a href="https://docs.microsoft.com/en-us/dotnet/standard/frameworks#net-5-os-specific-tfms" rel="noopener noreferrer"&gt;.NET 5+ OS-specific TFMs&lt;/a&gt; to &lt;code&gt;net5.0-windows&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add &lt;a href="https://docs.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#runtimeidentifier" rel="noopener noreferrer"&gt;RuntimeIdentifier&lt;/a&gt; to &lt;code&gt;win10-x64&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Native RealSense library files need be copied into .NET executable file's folder by MSBuild:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxz250747kjoekx7sx9d.png" alt="Copy native RealSense library to execution folder" width="800" height="526"&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>dotnet</category>
      <category>realsense</category>
      <category>csharp</category>
      <category>mixedreality</category>
    </item>
    <item>
      <title>How to access MySQL DB behind two ssh host using MySQL Workbench</title>
      <dc:creator>Chen Yu Pao</dc:creator>
      <pubDate>Fri, 25 Oct 2019 10:31:15 +0000</pubDate>
      <link>https://dev.to/windperson/how-to-access-mysql-db-behind-two-ssh-host-using-mysql-workbench-4dmi</link>
      <guid>https://dev.to/windperson/how-to-access-mysql-db-behind-two-ssh-host-using-mysql-workbench-4dmi</guid>
      <description>&lt;p&gt;If you have a server infrastructure like following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Win dev machine] &amp;lt;=ssh=&amp;gt; [Gangway Server] &amp;lt;=ssh=&amp;gt; [App Server] &amp;lt;--&amp;gt; [MySQL DB]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can access DB via SSH Tunnel, following these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;a href="https://www.atlassian.com/git/tutorials/git-bash" rel="noopener noreferrer"&gt;Git Bash&lt;/a&gt; or &lt;a href="https://winaero.com/blog/enable-openssh-client-windows-10/" rel="noopener noreferrer"&gt;OpenSSH client for Windows 10&lt;/a&gt;, invoke command:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh user_id@Gangway_Server &lt;span class="nt"&gt;-L&lt;/span&gt; 2202:App_Server:22 &lt;span class="nt"&gt;-N&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;after typing the login password of user_id of Gangway Server, leave this terminal window opened.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbs0e73en2xytgxpwfsb5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbs0e73en2xytgxpwfsb5.png" alt="SSH Tunnel" width="800" height="324"&gt;&lt;/a&gt;   &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open MySQL Workbench, create connection using &lt;strong&gt;Stand TCP/IP over SSH&lt;/strong&gt;, other settings like this screenshot:&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ii6ifjd6edpxwg5rvo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ii6ifjd6edpxwg5rvo9.png" alt="Alt Text" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After everything is done, close MySQL Workbench before closing the Terminal Window.&lt;/p&gt;

</description>
      <category>ssh</category>
      <category>mysql</category>
      <category>windows</category>
    </item>
  </channel>
</rss>
