<?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: Noriko Yamamoto</title>
    <description>The latest articles on DEV Community by Noriko Yamamoto (@nauleyco).</description>
    <link>https://dev.to/nauleyco</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%2F350190%2F878ecf55-e3c8-4944-8fe3-31bb1cd5cdfb.jpg</url>
      <title>DEV Community: Noriko Yamamoto</title>
      <link>https://dev.to/nauleyco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nauleyco"/>
    <language>en</language>
    <item>
      <title>How to Remove Trailing Slashes in SlimPHP Routes Using Middlewares\TrailingSlash</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Wed, 14 May 2025 18:28:07 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-remove-trailing-slashes-in-slimphp-routes-using-middlewarestrailingslash-4kf4</link>
      <guid>https://dev.to/nauleyco/how-to-remove-trailing-slashes-in-slimphp-routes-using-middlewarestrailingslash-4kf4</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require middlewares/trailing-slash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use Middlewares\TrailingSlash;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$app-&amp;gt;add(new TrailingSlash()-&amp;gt;redirect($app-&amp;gt;getResponseFactory()));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FYI: &lt;a href="https://github.com/middlewares/trailing-slash" rel="noopener noreferrer"&gt;https://github.com/middlewares/trailing-slash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>slimphp</category>
      <category>trailingslash</category>
    </item>
    <item>
      <title>How to use Application Default Credentials on CGP Cloud Run for Google Drive API</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Tue, 26 Dec 2023 18:55:21 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-use-application-default-credentials-on-cgp-cloud-run-for-google-drive-api-558</link>
      <guid>https://dev.to/nauleyco/how-to-use-application-default-credentials-on-cgp-cloud-run-for-google-drive-api-558</guid>
      <description>&lt;p&gt;Step 1. Create service account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d5IIH1Io--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tykp4b969n486ts23xhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d5IIH1Io--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tykp4b969n486ts23xhb.png" alt="Image description" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iYhLrtoF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kd9dbryvdvvr5p8nz7po.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iYhLrtoF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kd9dbryvdvvr5p8nz7po.png" alt="Image description" width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A4rGdvlm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4ad9wqrefgyqclzxu6s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A4rGdvlm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4ad9wqrefgyqclzxu6s.png" alt="Image description" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2. Set the service account to Cloud Run security settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---SPBFnnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fmt0ls520sdm6ggurb7q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---SPBFnnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fmt0ls520sdm6ggurb7q.png" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ATyatpJe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0u6jttkibyx97yzfa662.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ATyatpJe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0u6jttkibyx97yzfa662.png" alt="Image description" width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3. Share a Google Drive folder (or a file) to the service account email address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o5Bv0xlC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmvlzfu3448mtd7yt1hs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o5Bv0xlC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmvlzfu3448mtd7yt1hs.png" alt="Image description" width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2ceXw_Zj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ux236d0n1ekpmo9xta3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2ceXw_Zj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ux236d0n1ekpmo9xta3.png" alt="Image description" width="800" height="1020"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lWgZ3Ifn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0fgp5jrnxup0oqx3nc5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lWgZ3Ifn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0fgp5jrnxup0oqx3nc5w.png" alt="Image description" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K__AVYsx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghxsyg9knes7oys9ogsc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K__AVYsx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghxsyg9knes7oys9ogsc.png" alt="Image description" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;see also : 

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/identity/protocols/application-default-credentials"&gt;https://developers.google.com/identity/protocols/application-default-credentials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(for PHP) &lt;a href="https://github.com/googleapis/google-api-php-client"&gt;https://github.com/googleapis/google-api-php-client&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gcp</category>
      <category>cloudrun</category>
      <category>googledriveapi</category>
    </item>
    <item>
      <title>What to do when you receive a message from GitHub saying WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Sun, 26 Mar 2023 23:56:01 +0000</pubDate>
      <link>https://dev.to/nauleyco/what-to-do-when-you-receive-a-message-from-github-saying-warning-remote-host-identification-has-changed-21lf</link>
      <guid>https://dev.to/nauleyco/what-to-do-when-you-receive-a-message-from-github-saying-warning-remote-host-identification-has-changed-21lf</guid>
      <description>&lt;p&gt;If you pish to GitHub and receive a message like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% git push
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Please contact your system administrator.
Add correct host key in /Users/xxxx/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/xxxx/.ssh/known_hosts:2
Host key for github.com has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By using the following command, you can remove all keys belonging to GitHub from the known_hosts file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ssh-keygen -R github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, you will have a successful push.&lt;/p&gt;

</description>
      <category>github</category>
      <category>ssh</category>
    </item>
    <item>
      <title>How to switch multiple accounts for GCP gcloud command</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Sat, 15 Oct 2022 20:49:05 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-switch-multiple-accounts-for-gcp-gcloud-command-4791</link>
      <guid>https://dev.to/nauleyco/how-to-switch-multiple-accounts-for-gcp-gcloud-command-4791</guid>
      <description>&lt;p&gt;If you have two accounts below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sample account 1

&lt;ul&gt;
&lt;li&gt;config name: account1&lt;/li&gt;
&lt;li&gt;project ID: hoge-fuga-123&lt;/li&gt;
&lt;li&gt;account: &lt;a href="mailto:sample@account1.sample"&gt;sample@account1.sample&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Sample account 2

&lt;ul&gt;
&lt;li&gt;config name: account2&lt;/li&gt;
&lt;li&gt;project ID: hoge-fuga-456&lt;/li&gt;
&lt;li&gt;account: &lt;a href="mailto:sample@account2.sample"&gt;sample@account2.sample&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;STEP 1. create configuration set for account1&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config configurations create account1
Created [account1].
Activated [account1].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config set project hoge-fuga-123
Updated property [core/project].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config set account sample@account1.sample
Updated property [core/account].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;STEP 2. create configuration set for account2&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config configurations create account2
Created [account2].
Activated [account2].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config set project hoge-fuga-456
Updated property [core/project].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config set account sample@account2.sample
Updated property [core/account].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;STEP 3. switch to account1 and check config&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config configurations activate account1
Activated [account1].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config list
[core]
account = sample@account1.sample
disable_usage_reporting = False
project = hoge-fuga-123

Your active configuration is: [account1]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;STEP 4. switch to account2 and check config&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config configurations activate account2
Activated [account2].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% gcloud config list
[core]
account = sample@account2.sample
disable_usage_reporting = False
project = hoge-fuga-456

Your active configuration is: [account2]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;GCP original reference page: &lt;a href="https://cloud.google.com/sdk/gcloud/reference/config/configurations/"&gt;https://cloud.google.com/sdk/gcloud/reference/config/configurations/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gcp</category>
    </item>
    <item>
      <title>How to install ImageMagick to Cloud Functions PHP</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Tue, 26 Jul 2022 11:16:42 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-install-imagemagick-to-cloud-functions-php-368</link>
      <guid>https://dev.to/nauleyco/how-to-install-imagemagick-to-cloud-functions-php-368</guid>
      <description>&lt;p&gt;Put the php.ini file with &lt;code&gt;extension=imagick.so&lt;/code&gt;.&lt;br&gt;
That's it!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iKXtA6u_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5h40752u0z4eobp95e2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iKXtA6u_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5h40752u0z4eobp95e2.png" alt="Image description" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OVyb--ga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7kupak11h2pna5fx8oo8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OVyb--ga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7kupak11h2pna5fx8oo8.png" alt="Image description" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VC4af60m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/olbcos02wan3v4vxh0cx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VC4af60m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/olbcos02wan3v4vxh0cx.png" alt="Image description" width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And also, you can install Memcached, gRPC, protobuf, MongoDB, OpenCensus and PHPRedis to Cloud Functions PHP in the same way😉&lt;br&gt;
&lt;a href="https://cloud.google.com/appengine/docs/standard/php-gen2/runtime#dynamically_loadable_extensions"&gt;https://cloud.google.com/appengine/docs/standard/php-gen2/runtime#dynamically_loadable_extensions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloudfunctions</category>
      <category>php</category>
      <category>imagemagick</category>
      <category>gcp</category>
    </item>
    <item>
      <title>How to create my SlideShare URL</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Wed, 06 Jan 2021 17:26:52 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-create-my-slideshare-url-3hce</link>
      <guid>https://dev.to/nauleyco/how-to-create-my-slideshare-url-3hce</guid>
      <description>&lt;p&gt;These days the SlideShare account is created by LinkedIn account.&lt;br&gt;
And they create my SlideShare URL from my name of LinkedIn automatically.&lt;br&gt;
But I wanted to create my SlideShare URL with my username ( nauleyco ).&lt;/p&gt;

&lt;p&gt;At first, I changed my name on LinkedIn with below.&lt;br&gt;
First name : nau&lt;br&gt;
Last name : leyco&lt;/p&gt;

&lt;p&gt;And then, I sign up to SlideShare with my LinkedIn account.&lt;/p&gt;

&lt;p&gt;I could see my SlideShare URL as below.&lt;br&gt;
&lt;a href="https://www.slideshare.net/nauleyco"&gt;https://www.slideshare.net/nauleyco&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, I changed my name on LinedIn back. &lt;br&gt;
(*) Don't forget!!!&lt;/p&gt;

</description>
      <category>slideshare</category>
      <category>linkedin</category>
    </item>
    <item>
      <title>How to convert your name to Japanese Katakana.</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Thu, 24 Sep 2020 02:15:52 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-convert-your-name-to-japanese-katakana-56nn</link>
      <guid>https://dev.to/nauleyco/how-to-convert-your-name-to-japanese-katakana-56nn</guid>
      <description>&lt;p&gt;If you want to convert your name to Japanese Katakana ( same meaning as Kana, カタカナ, カナ ), you can use the Google translate.&lt;/p&gt;

&lt;p&gt;Input your name on the Google translate, and then check the pronounce by the Speaker icon.&lt;/p&gt;

&lt;p&gt;i.g. ) John Smith -&amp;gt; ジョン スミス&lt;br&gt;
&lt;a href="https://translate.google.com/#view=home&amp;amp;op=translate&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;text=John%0ASmith"&gt;https://translate.google.com/#view=home&amp;amp;op=translate&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;text=John%0ASmith&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--no4OgeC6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/nfvj1cqu78rrvkpj9j70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--no4OgeC6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/nfvj1cqu78rrvkpj9j70.png" alt="Alt Text" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kana</category>
      <category>japanese</category>
      <category>translate</category>
      <category>katakana</category>
    </item>
    <item>
      <title>How to write the original IP in the Apache log even via Cloudflare and Google Cloud Load Balancing (GCP LB)</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Mon, 14 Sep 2020 03:07:28 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-write-the-original-ip-in-the-apache-log-even-via-cloudflare-and-google-cloud-load-balancing-gcp-lb-f3l</link>
      <guid>https://dev.to/nauleyco/how-to-write-the-original-ip-in-the-apache-log-even-via-cloudflare-and-google-cloud-load-balancing-gcp-lb-f3l</guid>
      <description>&lt;p&gt;Follow the Cloudflare Document below.&lt;/p&gt;

&lt;p&gt;Restoring original visitor IPs: Logging visitor IP addresses with mod_cloudflare&lt;br&gt;
&lt;a href="https://support.cloudflare.com/hc/en-us/articles/200170786-Restoring-original-visitor-IPs-Logging-visitor-IP-addresses-with-mod-cloudflare-"&gt;https://support.cloudflare.com/hc/en-us/articles/200170786-Restoring-original-visitor-IPs-Logging-visitor-IP-addresses-with-mod-cloudflare-&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then, Add &lt;code&gt;35.191.0.0/16&lt;/code&gt; and &lt;code&gt;130.211.0.0/22&lt;/code&gt; for CloudFlareRemoteIPTrustedProxy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="sr"&gt; cloudflare_module&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;    CloudFlareRemoteIPHeader &lt;span class="ss"&gt;X-Forwarded-For&lt;/span&gt;
    CloudFlareRemoteIPTrustedProxy 35.191.0.0/16
    CloudFlareRemoteIPTrustedProxy 130.211.0.0/22
    CloudFlareRemoteIPTrustedProxy [your load balancer’s IP]
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After restart httpd, You will see the original visitor IPs on your apache access logs.&lt;/p&gt;

&lt;p&gt;FYI: GCP Document of External HTTP(S) Load Balancing Source IP addresses&lt;br&gt;
&lt;a href="https://cloud.google.com/load-balancing/docs/https#source_ip_addresses"&gt;https://cloud.google.com/load-balancing/docs/https#source_ip_addresses&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloudflare</category>
      <category>gcp</category>
      <category>apache</category>
    </item>
    <item>
      <title>How to connect to MS SQL Server 2000 in PHP7 PDO on CentOS 7</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Wed, 17 Jun 2020 16:21:50 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-connect-to-ms-sql-server-2000-in-php7-pdo-on-centos-7-ech</link>
      <guid>https://dev.to/nauleyco/how-to-connect-to-ms-sql-server-2000-in-php7-pdo-on-centos-7-ech</guid>
      <description>&lt;p&gt;As a premise, php and pdo are installed.&lt;/p&gt;

&lt;p&gt;At first, install &lt;code&gt;nixODBC-devel&lt;/code&gt; and &lt;code&gt;freetds&lt;/code&gt; and &lt;code&gt;php-odbc&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;unixODBC-devel
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;freetds
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;php-odbc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then, edit &lt;code&gt;/etc/odbcinst.ini&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vi /etc/odbcinst.ini
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[/etc/odbcinst.ini]:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[FreeTDS]
Description = ODBC for FreeTDS
Driver64    = /usr/lib64/libtdsodbc.so
Setup64     = /usr/lib64/libtdsodbc.so
FileUsage   = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, create an PDO object as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="nv"&gt;$host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'xxx.xxx.xxx.xxx'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'1433'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$dbname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'database-name'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'username'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;$dsn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"odbc:Driver=FreeTDS;"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; 
        &lt;span class="s2"&gt;"SERVER=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;;PORT=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$port&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;;DATABASE=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$dbname&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;;"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; 
        &lt;span class="s2"&gt;"ClientCharset=UTF-8"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$pdo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\PDO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$dsn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>php</category>
    </item>
    <item>
      <title>How to download a CSV file with Slim 4</title>
      <dc:creator>Noriko Yamamoto</dc:creator>
      <pubDate>Fri, 13 Mar 2020 15:32:44 +0000</pubDate>
      <link>https://dev.to/nauleyco/how-to-download-a-csv-file-with-slim-4-21a7</link>
      <guid>https://dev.to/nauleyco/how-to-download-a-csv-file-with-slim-4-21a7</guid>
      <description>&lt;p&gt;It's a sample code for CSV download with Slim 4.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;declare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strict_types&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Psr\Http\Message\ResponseInterface&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Psr\Http\Message\ServerRequestInterface&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DownloadCsvFIle&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Action&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;ServerRequestInterface&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;ResponseInterface&lt;/span&gt; &lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$args&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;ResponseInterface&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$csv_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/path-to-the-csv-file/csvfilename.csv'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$response&lt;/span&gt;
            &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;withHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Content-Type'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'application/octet-stream'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;withHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Content-Disposition'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'attachment; filename=csvfilename.csv'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;withAddedHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Cache-Control'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'no-store, no-cache, must-revalidate, max-age=0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;withHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Cache-Control'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'post-check=0, pre-check=0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;withHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Pragma'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'no-cache'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;withBody&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\Slim\Psr7\Stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$csv_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'rb'&lt;/span&gt;&lt;span class="p"&gt;))));&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;keyword: slim, slim4, psr-7, csv, download, file download, stream&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
